Advanced Namespace Tools blog

08 March 2018

History of ANTS, part 4

This entry in the history series covers from 2013, the year ANTS was released, up to the present.

New Years 2012-13

My New Year's resolution for the start of 2013 was to return to Plan 9 software development. My plan 9 systems had been dormant since sometime early in 2011, and life in general had been occupied mostly with my father's illness and death. It was time to re-engage with the world of the living. The first step was to set up a new Plan 9 development environment for myself, and as I was doing so, I noticed that many of the things I had worked on in the past seemed to fit together in a synergistic way. After about a week of exploring my own previous work, I had a project in mind - weaving together the different tools I had created, extending their capabilities, and releasing the resulting synthesis as a coherent package. The initial commit creating the plan9ants hg repo was made at 2 am on 9 January 2013.

2013 release for Bell Labs

The next two months were spent extending, testing, and documenting the ANTS system. I had missed out on the start of the 9front project and in retrospect I wish I had delayed the release until I added full support, but by the time I installed and tested 9front for myself, I was already approaching burnout and just wanted to get a release out there. I tested quite a bit using ANTS to have both Bell Labs and 9front namespaces co-existing on the same system, even though the only 9front feature I added was a -f flag to rerootwin along with a 9front namespace file. I created two virtual machine images - a full "9queen" and a miniature "9worker" and made a set of overly elaborate tutorials to go with them. tutorial2 is an example.

I announced ANTS in a message to the 9fans mailing list, and the story took a strange turn from there. I already wrote an interactive fiction game (which can be played in Plan 9, of course) about the next few months of my life, and this is a code-focused blog, so I won't rehash the details. Over the next few weeks I posted several embarassing-to-recall emails to 9fans and generally made a nuisance of myself. Fortunately, I took a break to get real life back in order and eventually calmed down. The break ended up being longer than I had intended.

2015 Updating for 9front

By 2015 it had become clear that 9front was the way forward for Plan 9. Fitting ANTS into 9front mostly required reworking the boot process. 9front had already created its own rc-based boot process and allowed the user to drop to a shell prior to mounting the rootfs and launching the termrc or cpurc. As a result, I ended up creating two different boot options, both of which are still supported in ANTS - either using a modified bootrc which inserts a section of code to create a hubfs and cpu listener in the boot namespace, or using the full plan9rc bootscript as modified for 9front.

There were also adjustments to make in the kernel code for writable proc/pid/ns, but overall adding support for 9front was less difficult than I expected. Cinap and the other 9front developers have done an excellent job preserving the strengths of the original design and keeping interfaces compatible while making improvements. For the next two years, I tried to support 9front and the original Bell Labs version in parallel. This added a lot of complexity to the ANTS build script, which worked by binding its own modifications over the original versions and then using the standard kernel build process. Now, there was an additional layer of binding the 9front modifications over the labs modifications, and then binding everything over the main file tree. In some ways it was a good demonstration of the flexibility of namespaces, in other ways it overly baroque and fragile.

2017-now: independent /srv and live+install cd images

A commonly requested ANTS-feature was the ability to make the divergent namespaces on a system more independent and avoid collisions of the conventional service names within /srv. At the start of 2017 I finally found a design and implementation I liked, copying how /env worked with rfork. I wrote a series of blog posts covering the evolution of that feature. After that work, I took another break of a few months. When I returned to development work later that year, i decided it would be good to offer another option for exploring or installing ANTS - full cd images.

Installing ANTS, involving as it did a customized kernel, was a more involved process than a standard mk install command, and not many people had the combination of time and interest to read the documentation and work out the details for their system. A live+install cd as a self-contained unit is easier to work with conceptually, people have an existing set of mental subroutines for using it. The first ANTS .iso images were released at the start of 2018, and have gotten orders of magnitude more use than the source install process ever did. The creation of the public grid of 9p services has had a synergistic effect, since the .iso images have the commands to utilize it preinstalled.

Thanks for reading this overly-elaborate history, the next release of .iso images will be in just a few days for the 5-year ANTS-iversary!