What you initially describe is a forward contract that's traded OTC (over the counter) between two parties. In the term sheet of a forward, you will see something along the line of:
Party A agrees to buy on some future date x amounts of y for the price of z from party B. That price is determined by no arbitrage (in FX, that means it is spot plus the interest rate differential and cross currency basis). You can see an example here. What you typically cannot do is to deviate from that price unless you enter a synthetic forward contract (combination of call and put with the same strike). If the strike is different from the forward, it is no longer fair, and you need to pay up front for the difference. Otherwise (ignoring margins which are also frequent in OTC these days), you have no initial cost.
Futures are different:
- Like forward contracts, the futures price is established so that the initial value of a futures contract is zero.
- Unlike forward contracts, futures contracts are marked to market daily. This means that futures prices change daily, and cash flows are made to account for the difference. This results in the value of future contracts at the end of each day to remain zero. This means you have gains or losses on a daily basis, which will show up on your margin account (that's where the name Mark to Market comes from).
Quoting from Hull: OPTIONS, FUTURES, AND OTHER DERIVATIVES, seventh edition 2009, P.27
The effect of the marking to market is that a futures contract
is settled daily rather than all at the end of its life. At the end of each day, the investor's gain (loss) is added to (subtracted from) the margin account, bringing the value of the contract back to zero. A
futures contract is in effect closed out and rewritten at a new price
each day.
The following example is in line with an example in Hull as well, modified to fit the GBP future:
- you buy on June 5 a GBPUSD Future with 62500 GBP (contract size) for the price of 1.19
- delivery in December (not important here)
- initial margin = 3080
- maintenance margin = 2800
Given a fictional price series for the future you bought, the margin account looks like this:

At the end of the first trading day, the future settles at 1.18405. The loss is (1.19-1.18405)*62500 ≈ 372. Therefore, our margin account falls below the maintenance margin (3080-372 = 2708). To fill it up to 3080 again, one needs to add 372 to the account to fill up the margin account again.
Until Jun 12, the gains and losses do not lead to another margin call. However, on Jun 13, the margin account drops below 2800 again. Therefore, 459 additional capital is needed to fill up the margin account. Similar steps happen until Jun 24 when the contract is closed out before the end of the day for a price of 1.16759. The numbers in the second column (Futures price) represent the futures prices at the close of each trading day (the first and last are intraday prices when the future is bought and closed out). The result is a cumulative loss of 1402. Note, the excess margin (above 3080) is assumed to not be withdrawn for simplicity.
Another difference to OTC products:
With OTC (forwards) you can decide on the volume and date, with futures, the future chain (contracts with different expiry) is pre-determined. Either you take it as is, or don't trade. The figure below shows the chain for GBPUSD CME futures which can be found directly on the exchange website.

The contract specification can be found here. I personally prefer the DES page of Bloomberg for an overview, which looks like this. You can see the margin requirements at the bottom right corner.

For example, if you have GBPUSD futures on the CME, each contract delivers 62.500 British Pounds (the Contract unit). Price quotation is in USD and cents per GBP. The margin example above was using these specifications.
Although a future price changes constantly it is different from spot because the future price at any given time is determined by no arbitrage (Spot, adjusted for interest rate differential). When you enter the future, you get a fair price for the chosen delivery date. That price will adjust constantly, and you have daily mark to market. Therefore, you have direct gains/losses with limited margin (outflow). If you for example are based in the US and need GBP in 6 months, you could simply buy the amount directly at spot (which also gets rid of price fluctuations as you already own the needed GBP). However, you would need to set aside a considerably larger sum up front because futures contracts delay payment and delivery. Most of the time though, futures traders do not take delivery and choose to close out positions by entering the opposite trade. That is why Open Interest is very low for the Jan and also Feb contracts, while it is very high for the Mar contract - see the exchange webiste.

Exchanges are very transparent, and all details are available online. For example, margin requirements can be found here. An example of daily mark to market in the section How is margin held in my trading account affected by price fluctuation? of the CME website (for E-mini S&P 500 but the logic is exactly the same for FX). Although futures seem simple, the exact details are more often than not very complex. A solid intro can be found on in the Joint Audit Committee's Margin Handbook.