Wednesday June 14, 2006
It Must Be Time for TeaMike Kupfer's Weblog As I mentioned in a previous entry,
the ON sources that are available via
opensolaris.org are a subset of the ON consolidation in the
Solaris product (90% as of build 42, measured in lines of
text). We've organized the ON source so that if part of a
component (library, command, kernel module) is closed, the
entire component is treated as closed. Closed components are in
their own subtree ( Since the OpenSolaris launch, I've gotten a few requests to support partial-source components. This is where the component is mostly open source, but it contains some code that can't be delivered as source for one reason or another. The usual proposal is to modify the OpenSolaris build to support a mix of .o and source files, similar to the way Sun and other vendors delivered their Unix kernels in the 1980s.
The appeal of supporting closed .o files is that once the
infrastructure is in place, the open source for these components
can be easily exposed outside Sun. And there's some precedent
for this practice, such as the closed-source files that were
split out from libc to The most obvious problem with this approach is that it complicates the OpenSolaris build infrastructure. Mechanisms have to be implemented to identify which .o files need to be included with the closed binaries, and to restore them after a "make clean" (but only for external developers, mind you). By itself, this extra complexity wouldn't be sufficient to kill the .o approach, but it means we don't want to spend energy on it unless it's an approach we want to keep.
A second problem is that this approach blurs the separation
between open and closed source. If we no longer have a system
where everything in
A third problem with this approach is that it makes it harder to
work in the open source tree. Imagine you're working on a
component that contains Worse, suppose you want to change a struct that's defined in
A fourth, more strategic, problem with this approach is that by reducing the barriers to having closed source in the Solaris product, it reduces the incentive to eliminate (or open up) the closed source. A fifth and final problem with this approach is that it assumes a delivery model where the master workspace is internal to Sun, and the external workspace is just a mirror that is produced by filtering the main workspace. That's not the model we're after in the long term. Rather, we eventually want the external workspace to be the master. So what about the precedents that I mentioned earlier? Let's
look at libc and The other precedent that I mentioned was the ath driver, which has some uuencoded .o files in the source tree. This approach reflects the regulatory requirements for wireless devices in (at least) the USA. Government certification is required to deploy these devices, and given the flexibility of the Atheros chip set, the Hardware Abstraction Layer (HAL) software is part of what gets certified. Change the HAL binaries, and you invalidate the certification. So even in Sun's internal source tree, the HAL files are kept as uuencoded binaries, not as source. This means that many of the issues with a general .o mechanism don't apply here. There is no special-case makefile magic for "make clean", and external developers get exactly what internal developers get. In summary, the .o approach requires non-trivial work, it has legal risks, and it treats the external community as second-class citizens. For these reasons, we will not pursue it. Notes[1] We could set up the makefiles in
such a way that you could tell if Technorati tags: OpenSolaris Solaris (2006-06-14 09:00:00.0) PermalinkComments:
Post a Comment: Comments are closed for this entry. |
Calendar
RSS Feeds
All /General /OpenSolaris /Solaris SearchLinks
NavigationReferersToday's Page Hits: 121 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||