The difference; HTC pays a group of people who's job it is to make things work. The fact that that 2.2 has even an minimal port for the Tattoo is testament to the open source community.
the driver interfaces are exempt from gpl. that's how e.g. nvidia can publish closed-source drivers.
however;
1) those interfaces are in constant flux (a situation officially supported by linus himself) which makes it more difficult to maintain proprietary drivers. if you open-source your module and it becomes part of the mainline, it's migrated to the new interface by the dev who introduces that change.
2) once you load a proprietary driver, the kernel is considered to be 'tainted'. this means people are much less willing to listen to you when you report problems. (try dmesg | grep -i taint if you're using a proprietary driver)
HTC Tattoo - Donut - 2.6.29 kernel source code - http://dl3.htc.com/RomCode/Source_and_Binaries/click-656120....
The difference; HTC pays a group of people who's job it is to make things work. The fact that that 2.2 has even an minimal port for the Tattoo is testament to the open source community.