Quote from Paul Rose:
I don't know the definitive answer to your question, but long term historical futures can be fun.
For TA, people want to see a "continuous" contract even though such a thing doesn't exist.
To generate the illusion, the data is pieced together from whatever contract was in front on a particular date. However, this leaves discontinuities (gaps) on the maturity dates.
There are lots of ways to make the data look more continuous (and I've seen three):
1) do nothing, leave the gaps
2) translation -- leave the newest contract alone, add(subtract) a value to the previous contract to get rid of the gap
3) scaling -- leave the newest contract alone, but multiply(divide) the previous contract by a constant to get rid of the gap
Also, the rollover in the history may be based exclusively on maturity date or by paying attention to when the next contract's volume or open-interest exceeds that of the current contract.
Those three data sources you listed may have rolled up the data using different version of the above (or something else altogether), or maybe it is something else altogether.
I used to write the continuous contract history simulation for a (now obsolete) market data terminal many years ago. I don't have first hand knowledge of the sources you listed, but I have seen how the sausage comes out of the grinder (so to speak).