Sortix 1.0 “Self-Hosting & Installable” was released on 2016-03-28. It is a considerable improvement on the previous 0.9 release. It accomplishes what was almost in reach back then: Being self-hosting. This release wears the 1.0 number proudly as it is actually fairly 1.0-like by hobbyist operating system standards. It's a statement that Sortix has bootstrapped and that it is ready to take itself seriously. This page covers the notable aspects of this operating system release.
- Installable on virtual and real hardware.
- Possible to develop under itself.
- Inspire confidence in the system.
- Be a base for future growth.
Here are some of the exciting additions in the 1.0 release:
Sortix now has an interactive installer that lets you install Sortix onto harddisks. The included GRUB bootloader makes it easy to single boot Sortix. Dual boot is possible as well with a bit of manual help. The installation documentation is available during the installation. There's also an interactive upgrader that upgrades a previous Sortix system to the current release. This will be useful for the next release.
The system source code is in
/src as a git repository. All the programs needed
to build it are installed. System components can built with
make and installed
make install. development(7) covers
rebuilding the whole system. Patches welcome.
Thanks to the port of mdocml, Sortix now has a manual page viewer. Sortix remains mostly undocumented, but the 1.0 release has documentation for most Sortix-specific things a casual user would encounter. The priority is to document Sortix-specifics first and rely on user knowledge about other similar systems.
Converted to C
The vast majority of the user-space code has been converted to C, rather than being C-like C++. The kernel, the ext2 driver, asteroids, and trianglix all remain C++.
Relicensed to ISC
The base system has been relicensed from LGPLv+3 and GPLv3+ to the ISC license.
There's a new custom disked(8) partition editor that lets you create and manage MBR and GPT partition schemes. It's still a bit rough around the edges, but the user experience of GNU parted made me think I could easily do better.
There's a login(8) screen on boot of permanent
installations. Passwords are stored in
/etc/passwd after being salted and
hashed with the bcrypt password hash. It is designed to be slow, such that
brute-forcing is entirely unfeasible. The login screen is secure, but
authenticated users have no protection from each other and the system is not
safe for multi-user configurations.
The init(8) system has been rewritten. Its partition and filesystem handling has been vastly improved.
ATA & AHCI drivers
The ATA (PATA) driver was rewritten with DMA support. There is also a new AHCI (SATA) driver with DMA support. This should cover a high percentage of systems. The drivers now write in the background which makes I/O more efficient.
The PS/2 controller driver was written along with the keyboard driver. There is now also a PS/2 mouse driver.
The bootloader can now set up a graphical framebuffer for the operating system, allowing Sortix to have graphics on all the systems where GRUB has graphics.
The keyboard layout system has been redesigned. Formerly keyboard layouts were hard-coded into the kernel. They are now compiled from a sparse description into a table that can be loaded into the kernel console.
The pager program has been rewritten and now supports colors as well as scrolling backwards. This is useful when viewing manual pages and using git commands.
The kernel terminal line discipline has been rewritten and the POSIX termios interface has been implemented. This removes a major obstacle to porting third party interactive terminal programs such as editors. The next release will add a libncurses port.
The arc4random interface has been embraced and added to the standard library and
kernel. There are now
/dev/urandom devices. User-space is
ready for real kernel entropy, but the kernel only has the system time so far.
The POSIX regular expression API
<regex.h> has been implemented efficiently
and is used in programs such as expr.
Sortix libz has been developed further and is ready for adoption. It is a cleaned up and modernized fork of zlib that remains API and ABI compatible.
The ports collection has been improved and updated. Ports of e2fsprogs, flex, grub, libglib, mdocml, pkg-config, and xorriso have been added.
And much more
The majority of work this release cycle has been spent on bug fixes, cleaning up the code, and smaller features. These changes accumulate and make this an altogether much better release than the previous. There are more ports, things work better, and things are more polished.
See the 1.0 release milestone for a list of all the completed development tasks. See the commit list for the 1.0 tag for the full list of changes.
You can download Sortix 1.0 from your local mirror. The
system source code is available inside the system at
/src or from the mirror.
The full source code, including ports, is available from the mirror. The source
code of individual ports are available through the
It was released on 2016-03-28.
Sortix 1.0 contains 169k lines of source code. This count doesn't include the ports collection, but it does count the netbsd libm which is 28k lines.
See also the screenshots of 1.0.