What is 9legacy?

9legacy is a continuation of Plan 9 from Bell Labs. It is a set of patches, based on the latest release of Plan 9 from Bell Labs, regularly updated and assembled into a ready-to-install CD image. It used to be an alternative distribution, but it is now better described as a continuation.

How was 9legacy born?

We were administering dozens of file servers around the world. We relied on many patches that were not part of Plan 9 from Bell Labs, so we needed a way to centralize them and to automatically build a distribution from a chosen set of patches, always synchronized with the most recent Plan 9 from Bell Labs changes. 9legacy was born to fill this need.

When was 9legacy born?

9legacy was born in the summer of 2010, as both a Mercurial repository and a simple list of files and patches in an HTTP directory.

As the number of patches grew and they needed a simpler and clearer interface, the current 9legacy website was launched in June 2011.

Is 9legacy a fork of Plan 9?

9legacy is not a fork, it is an experimental patch queue for Plan 9 from Bell Labs.

While Plan 9 was maintained at Bell Labs, we kept 9legacy as a set of patches rather than a fork, so that every change could be reviewed and contributed back. Plan 9 from Bell Labs is no longer maintained, but it remains the reference distribution of Plan 9.

We still keep 9legacy close to it. Small, independent patches are easy to read, to share and to apply, whether on Plan 9 from Bell Labs or on its derivatives, and we contribute the ones we find sufficiently interesting back to the Plan 9 community.

What is included in 9legacy?

You can see 9legacy as an experimental branch of Plan 9, filling the gap between developments in progress from anywhere and the stable Plan 9 from Bell Labs distribution.

Several types of patches are available in 9legacy:

Which tools are used to maintain 9legacy?

Developers produce patches with whatever tool they prefer. It is common to use Git or diff. Patches are always published as standard unified diff files, applied with patch. Both diff and patch are available on Plan 9, thanks to APE.

The 9legacy build machinery is based on the same tools used to build Plan 9 from Bell Labs, glued together with custom rc scripts.

The 9legacy tree is also available as a Git repository, at github.com/0intro/9legacy. A separate repository, github.com/0intro/plan9, mirrors Plan 9 from Bell Labs changes since December 12, 2002, for those who prefer Git.

Why should I use 9legacy?

You should probably not. We recommend using Plan 9 from Bell Labs.

You can use 9legacy if you are interested in particular patches or hardware support, or if you want to try experimental things.

Are there any other Plan 9 distributions?

Yes, of course. There is 9front, an active community fork that has carried Plan 9 forward for years, with a native amd64 kernel, much wider hardware support, regular releases and many new features. A number of its bug fixes are ported into 9legacy.

Erik Quanstrom's 9atom added a PAE kernel, an amd64 kernel and extra hardware support. It is no longer maintained, but remains interesting. NIX was an experimental Plan 9 for many-core machines, developed as a research system. Harvey OS made Plan 9 buildable with GCC and Clang. It is now dormant, and its spirit lives on in r9, a reimplementation of the Plan 9 kernel in Rust.

Some small components of these distributions are included in 9legacy.

We encourage you to look at the other Plan 9 distributions and discover the many interesting features developed by the Plan 9 community.

How to apply the 9legacy patches?

Perhaps this is not obvious for everyone. For example, if you want to apply the termrc-timesync patch:

cd /
hget http://www.9legacy.org/9legacy/patch/termrc-timesync.diff | ape/patch -p1
        

If you want to unapply a patch, use ape/patch -R.

How to keep my system up to date?

We serve the 9legacy sources over 9P at sources.9legacy.org, in the same way Plan 9 from Bell Labs is served from /n/sources. Once 9legacy is installed, you can keep your system current with replica/pull:

replica/pull /dist/replica/9legacy
        

This mounts the server, downloads only the files that changed and updates your tree. By default, it pulls the 386 and amd64 trees.

How to submit a new 9legacy patch?

Contributions are highly appreciated. Patches should be sent as standard unified diff files against Plan 9 from Bell Labs. On Plan 9, you can use ape/diff -Nru.

We provide a helper script called sdiff ("source diff"), which diffs the files given as arguments against /n/sources.

Patches should be sent to the following e-mail address:

I don't understand, why it isn't a fork?

A fork is a branch created at some point in the history of the original project, then optionally partly synchronized, either regularly or occasionally.

9legacy is not a fork because it is a set of independent patches always located on top of Plan 9 from Bell Labs. Most of them apply as is, even if some occasionally need to be rediffed or adjusted for incompatible changes. In the same manner, most of the patches also apply on derivatives of Plan 9, as long as they do not differ in incompatible ways.

In 9legacy, most patches are totally independent from each other and few depend on one or two others. It is up to the user to choose which patch to use.

9legacy also evolves in the same spirit as Plan 9 from Bell Labs, and we aim to stay compatible with it.

What do the statuses on the patch page mean?

The status reflects the origin, quality or purpose of a change. The most interesting patches are included in the 9legacy CD image, so they do not have a status column.

Is Plan 9 from Bell Labs still maintained?

Plan 9 is no longer maintained at Bell Labs. The last change and CD image were published on January 10, 2015.

In March 2021, Nokia transferred the copyright of Plan 9 to the Plan 9 Foundation, which re-released all the historical editions under the MIT license. Plan 9 from Bell Labs is now stewarded by the Foundation and distributed from 9p.io.

Because of this, 9legacy is now a continuation of Plan 9 from Bell Labs rather than an alternative distribution.

I want to use the Go programming language on Plan 9. What should I know?

Go runs on Plan 9, on the 386, amd64 and arm architectures. You should consult the Go on Plan 9 wiki page. Bootstrap binaries are available on the download page.