Doing Cleanup in Public?
In a response to my previous blog entry, JB asked whether we could have opened up the source code and then cleaned it up after the fact, in public. The question was about OpenJDK but it applies equally well to phoneME.
For phoneME at least, and probably also for OpenJDK, doing the cleanup in public is unfortunately a non-starter. In several instances the source code contained some technology that is proprietary to some third party. Sun licensed this technology from the third party but Sun doesn't own it. In some cases (but not all) the license allows us to redistribute the technology in our commercial products. However, releasing the source code under GPL would probably be a breach of the license agreement. At the very least, we'd need to get permission from the third party, and perhaps renegotiate the license.
For phoneME we had to deal with a dozen or two instances of third party technologies. In some cases we believe the third party's license allowed us to open source the technology and so we went ahead and did it. Note that open-sourcing somebody else's code doesn't change the license. You can see a list of such third parties by looking at the third party license file /legal/thirdpartylicensereadme.txt
in the phoneME svn repository.
There are several other cases where we didn't have the rights to distribute the open source, and so we had to remove this technology from the source code before opening sourcing it.
Couldn't we have put all this stuff out there and cleaned this up later? Well, if the technology had been published and later deleted, it still would have been published. There would have been a window where somebody on the Internet could have copied the technology. Some of our partners are very sensitive about this.
Furthermore, since all the source code is in svn, "deleting" it really just deletes it from the current and future revisions. It's always possible for someone to retrieve earlier revisions in which the technology would still be present. In general I don't believe there's a way to excise particular bits of history or individual files from a svn repository. (If there is, somebody please let me know!) The svn repository -- including its history -- is open for read-only access to everyone on the internet. Once something is put in there, it effectively can't be deleted without reconstructing the entire repository. (Kind of gives one a pause, doesn't it?)
For these reasons, we were extremely conservative about not letting anything out to java.net until we were sure we had rights to publish all of what was going out. The weeks leading up to the launch date were quite a roller coaster. There were several times when we thought we were ready to go, but we had to pull back and delay because we uncovered another legal issue. I personally spent a bunch of time tracking these down. This isn't quite what I had in mind when I decided to become a programmer!
The bottom line is that despite the momentum around open source and transparency, there is still a tremendous amount of sensitivity around keeping certain pieces of technology proprietary. At Sun we're committed to opening up most if not all of our technologies, but we must be careful not to let any partners' technologies leak out, lest we breach our license agreements.