Unleashed 1.4 Released (final release)
lauri at hacktheplanet.fi
Sat Apr 4 15:55:24 UTC 2020
Nearly four years, you say? It definitely did not feel that long. It has been a
blast working on this stuff - I would use the word 'liberating'.
Now that we're dead, I'd like to give my point of view on why we forked in the
The story is actually quite simple - Jeff came to Finland once and we were at a
pub lamenting the problems that were present in the illumos project and
community at the time. My good friend and then-roommate Jouni said, I think
jokingly, "why don't you just fork it?", and we laughed and got some more beer.
The next week Jeff sends me a link to a repository on repo.or.cz - apparently
he didn't take that remark as a joke.
What followed was a flurry of doing all the things we ever wanted to do in
illumos, but were unable. To give an example, I don't believe the illumos
project will ever be able to change their uname from SunOS 5.11, and I don't
believe they will ever be able to change their compilers to generate 64-bit
output by default like we have. The reason is simple: backward compatibility.
In all things, the illumos project tries to be both API and ABI compatible. You
might ask "with what?", but this goal of compatibility is not actually a
written goal - they just want to keep all third party software working as they
did before, avoiding all breaking changes.
Because of API compatibility, if you compile on illumos, you need to always
provide your compiler and linker a whole bunch of options to say things like "I
want to use sockets", or "I want the POSIX version of getpwent_r, not the
POSIX.1c draft", or "I might deal with files larger than 2^31 bytes", since
none of that is available in the default compilation environment.
Because of ABI compatibility, it is very difficult to modify the behavior of
any libc or even kernel interface. Even if you fixed the API of something
really broken, you would need to provide the old behavior to applications
already built before. It is somehow unfathomable for illumos to say "recompile
your applications" to downstreams.
So, yeah, we fixed a lot of that in Unleashed. The magic ingredients were
nothing more than "have releases" and "deprecate things". Having boundaries
where you can say "this is no longer okay", or "you need to recompile" to
applications is a powerful tool. If illumos had boundaries like that, they
could probably implement changes like we did. But since they don't, they are
perpetually stuck in the 1990s for compatibility reasons.
But all good things come to an end. For me personally, it was great - I got to
make the operating system better, and learned a lot of things about it in the
process. Even if nobody else ever takes our patches, I'll still call Unleashed
Lauri Tirkkonen | lotheac @ IRCnet
More information about the Devel