Andreas Constantinou of Vision Mobile has a post considering this question that is well worth a read. Bear in mind, though, that the contention is that Android is the most closed open source system. Point being, it is still open source, even if some of the practices mentioned effectively limit access to the bleeding edge of the platform.
1. Private branches. There are multiple, private codelines available to selected partners (typically the OEM working on an Android project) on a need-to-know basis only. The private codelines are an estimated 6+ months ahead of the public SDK and therefore essential for an OEM to stay competitive. The main motivation for the public SDK is to introduce the latest features (those stemming from private branches) into third party apps.
Out of all his points, I think that is the most compelling. Some of the rest are consequences of this point, others have less to do with the source code as they do with how Google is trying to funnel the handset and application markets in certain directions. To me, some of this is excusable because of the speed at which Google is trying to evolve Android and some is a bit more eyebrow raising.
You have to admit that while it isn’t anywhere near perfect for handset makers in particular, it at least enables OEMs in this space where Apple completely holds the keys to its hardware kingdom. We’ve seen things like the compatibility test suite (CTS) before, in particular Java’s compatibility suite, that in practice limit who can take advantage of Android’s openness. Hopefully Google will realize Sun’s mistake in maintaining a compatibility program well beyond its usefulness and will loosen the reins sooner rather than later.
As a user and developer, however, these concerns are trumped by the better opportunities to exert my software freedom to hack on an Android phone and directly install my own apps. It isn’t complete freedom as Bradley Kuhn has so thoughtfully detailed but close, way closer than anything else out there.