Michael L. Love/proclus/GNU-Darwin link block
Related social networking sites that might be lesser known
status and microblogs
Superposed system facilitates the porting of free software to Darwin-based operating systems
Dr. Michael L. Love, 2001.06.15
The FreeBSD ports system has been modified and overlayed with additional tools for porting software to the Darwin architecture, which is the core of Apple's Mac OSX. Although the superposed system is derived from the FreeBSD ports, it has been adapted to the novel architecture for improved control over the porting and packaging process. The porting system allows for thousands of free software programs to be rapidly and automatically bootstrapped towards maximum functionality. In addition, the system has been ported to the GNU/Linux operating system, so that effective tools for creating software distributions can be widely distributed to the free software community at large. Over 2000 software packages have been created for Mac OSX with this system, and they have been published on CD with the system sources as The Darwin Collection (TDC). Such packages are compatible not only with Mac OSX, but with other Darwin-based Unix distributions as well, such as The GNU-Darwin Distribution. Moreover, together with the developer's tool set, which is provided with Darwin and OSX, The Darwin Collection provides a familiar environment for Unix developers. These tools will certainly assist the optimization of Unix software for Apple's native Cocoa interface, so that Apple users can be exposed to the benefits of free software.
The TDC packages derive from the FreeBSD ports system which was modified for Darwin-based operating systems and bootstrapped to convergence at maximized functionality. The ports system comprises thousands of free software projects that have been ported to FreeBSD, and TDC leverages this system to bring free software to Mac OSX users. These ports have tens of thousands of interconnections, called dependencies, which must be satisfied in order to build the applications. Such a large and complex network of software dependencies demands extraordinary measures to satisfy them fully, especially for a new platform like Darwin. In order to address this problem, an uber-system has been superposed on the ports system to increase control over programming errors, bootstrapping, installation and packaging. Moreover, the FreeBSD package manager has also been ported to OSX so that the naive user will not have to face a daunting tangle of dependency. Because this is a user-oriented, cross-platform, free software effort, the future evolution of this superposed system is going to be one of the most fascinating aspects of this project.
This page contains a ports tree list instead of a package list, a crucial distinction. Packages are typically categorized according to their mutual dependencies, so that there are more categories in a package list than in a ports list. If you have been working with the ports system and the package manager, you may already have a package list in /usr/ports/packages. The actual packages are stored in /usr/ports/packages/All, and links are used to list them by category. In the ports tree list below, ports are categorized generally with some port status information added. It is a subset of /usr/ports. We have separated our treatment of the ports and packages onto different webpages in order to make the distinction clear: We use the ports system to build packages (#make package).
Currently, 1119 ports install automatically, while another 1075 require some modification which may be trivial. Most of the trivial modifications have been treated in the GNU-Darwin porting tips, although some extrapolation may be required for particular cases. All of the modified ports will soon be available in GNU-Darwin CVS, but if you cannot wait for that, you can download the gigabyte tarball. 1797 ports, such as the KDE-related projects, require specialized attention and have not yet been ported to Darwin. Little effort has yet been applied to the foreign language, java and palm ports, which accounts for most of the remaining 1390 ports overall. In general, the foreign language ports can be expected to readily install. All of the packages that were generated from this analysis are available now on-line. In addition, the status of individual ports can be checked in the following table.
Check port status here (updated Wed Jun 27 18:07:52 EDT 2001)
Ports listed by status (updated Wed Jun 27 18:07:52 EDT 2001)
Bootstrapping should be distinguished from porting runs, wherein the ports are not cleaned between builds. In a recent two-pass porting run, about 1100 ports installed automatically, and no additional ports were installed on a third pass. To get this far without a TDC installation, you will have to bootstrap the ports (see below). The system was a fully updated Mac OSX with a complete GNU-Darwin and TDC package installation. No modifications were made to the ports themselves or to the OSX system, except as described or extrapolated directly from the porting instructions and tips. About 200 of the ports which were installed have not yet been packaged, so that at least two runs were required to satisfy all of the dependencies. No significant improvement was observed after bootstrapping, because the TDC packages are derived from a ports tree that has been repeatedly bootstrapped. Correspondingly, no improvement was observed with the gigabyte tarball files in place either, although about 40 additional packages were generated. Many of these packages were generated in the math catagory, where there has apparently been some file loss in the ports-darwin.tar.gz archive (ports tarball update available, Oct 1, 2001). If you do not have access to the TDC CDs, you might like to try to bootstrap the ports yourself. The following "quick and dirty" procedure will give you the general idea.
That would typically take at least a week and over 20gig total, but it is worthwhile to do. Bootstrapping maximizes the number of installs, and optimizes functionality. Each round builds more ports as more dependencies are satisfied and more features are enabled. The -i flag and the uber-system makeit scripts automate the procedure despite errors. To install everything possible and ignore all errors, use the -i flag. Afterwords, clean the ports, so that they can be automatically reconfigured with increased functionality, which leads in turn to the installation of additional ports. If you have installed the package manager applications, the -i flag will bloat your package database (/var/db/pkg) with erroneous package entries. After your "make -i" runs, remove the bloated database, because makeit will build a valid package database in its place. Use the uber-system makeit files to operate the ports system and install only the ports that have no errors. The uber-system obviates problems, stopping ports that have errors, and proceeding on to the next port. It should be noted that this bootstrapping method can be adapted to great advantage for smaller projects with clustered dependencies, such as graphics, printing, text processing, GNOME, Mozilla, or OpenOffice, but the real utility will be for the users who will soon be given icons, windows, and buttons for the operation of the ports system via the uber-system.
There are some preliminary instructions for building the package manager, so that you can roll your own specialized ports-based distribution, if you choose. If you are using the ports system for installation and not packaging, then it may be benefial at this juncture to try the FreeBSD ports tarball and simply replace the /usr/ports/Mk/bsd.port.mk file with the one from CVS. Clearly, the results presented here show that for packaging, a variety of approaches will maximize the package yeild. We will be working to improve the system with patches and other modifications for the next issue of TDC, and we will be adding shared library support for production of the upcoming GNU-Darwin beta release. Thus, this paper is just about in its final form at last.
In addition to the work presented here, we have ported these tools to GNU/Linux and OpenBSD in the hope of harmonizing free software development across the OSX, FreeBSD, OpenBSD, GNU/Linux, and GNU-Darwin platforms. When ports system improvements arrive from the Open Package Project, we will incorporate the changes along with FreeBSD and the other major distributions. Such a convergence of interest will certainly accelerate the development of high quality, free software and help to fasten it as critical infrastructure to the public space, so that it cannot be removed by predatory interests. The ports system also protects the users from predators, because the source code is downloaded on-demand from trusted maintainers, and it is securely verified with the MD5 checksum system. It is compiled on the spot in the eyes of the user, and the user is free to use, change, or redistribute the software as they see fit. Thus, the FreeBSD ports system, now as a cross-platform, globally distributed, cooperative development and distribution system could form a nexus of user freedom and empowerment. What possible significance could .NET have in such a world, where thousands of free software applications can be readily downloaded and configured especially for you, especially for a computer that is optimized according to your own personal needs and desires and none other? This is the world where the user operates the distribution building tools, and we now have all of the components at hand, which are required to make this world real. Moreover, it is difficult to imagine any future platform that could not benefit from the rapid free software porting services which are also provided by the new superposed porting system.
GNU-Darwin porting tips
TDC: The Darwin Collection CD set.