Hacker Newsnew | past | comments | ask | show | jobs | submit | sortie's commentslogin

Author here. Sortix is Sortix. MINIX is MINIX. I think each project has different goals and that's fair.

Some thoughts though, for my os-test project I went and installed every free software Unix-like OS and ran a lot of tests on each of them and got experience with each of them.

I don't really consider MINIX a relevant OS. It doesn't have a 64-bit port. The site doesn't offer HTTPS and only has MD5 checksums, so there clearly isn't an attention to security. Sortix offers HTTPS downloads with SHA256 checksums and is up front about its lack of security (next release will do release signing). The latest MINIX release is from 2014, which is a bad project health sign. My latest release is from 2016 (been a bit busy since I got a full time job, but the next release is still being made if at a slower pace, and nightly builds are available and supported). The stable Minix 3.3.0 was pretty buggy and things got better after I upgraded to the Minix 3.4.0 prerelease. The os-test data revealed a bit of a lack of attention to detail in the UDP stack.

I don't think MINIX is really trying to be a more generally used system. It used to be more of an education system, which lead to Linux. I have no plans to make Sortix widely used either, but I avoid making mistakes that prevent adoption as part of the general good work. I want to make a good OS that I personally like.

I'm happy to be compared to systems like MINIX, Haiku and GNU/Hurd. The ideal reaction to someone mentioning Sortix support should be "Eh, Sortix is cool but who cares? I guess I can do it if trivial". And that's fine, at least they heard of it. I'm a one person project with a small community but I think I'm competing reasonably in this space. I don't really consider Minix that usable. GNU/Hurd is alright but the GNU project is notoriously bad at actually releasing an OS themselves with any sort of technical vision and quality. Haiku is pretty interesting, though it seems to be focusing more on being BeOS than being a general purpose system (it doesn't have a multi user support for instance, which Sortix does have, though with a few security vulnerabilities). They're all different projects with different goals and strengths and I try to make Sortix better whenever I can do it.

I want Sortix to have a really good and inclusive community. I enjoy the coding but I really enjoy putting the whole OS together and building a whole project and community.


For some insane reason the Intel Management Engine runs Minix, which makes it one of the most widely deployed operating systems.


Yep. I already have an issue about virtio filed at <https://gitlab.com/sortix/sortix/issues/473>. Not too high priority to implement but something I'd love to get to. Feel free to post additional hints there if you have additional tips for when I get around to doing it.


I started a note on your gitlab issue, but saw you already had an mmio reference linked. i did the pci version and it looks about the same complexity.

aside from a reference, being able to instrument the device side on qemu makes debugging drivers a total cakewalk. so do that. best of luck with your project. i wish more people went through the exercise. even though a mature OS after decades of maintenance might exceed 1M lines, you really dont need anywhere close to that to get what you need done. you learn alot, and can make your own model


Author here. Like in Linux, libc provides errno on Sortix. The difference is that glibc does "#define errno (*__get_errno_location())" while Sortix libc does "__thread int errno;". linux syscalls return a negative value containing the negated errno, while Sortix system calls use two output registers: The return value register and the errno register. That allows Sortix system calls to legitimately return -42 if they want, which is not possible on Linux. Sortix libc assigns the errno register to the thread local errno if the errno register is non-zero.


Author here. POSIX requires errno to be thread local, but with few requirements. Commonly libc's #define errno (*__get_errno_location()). Why? It's because the thread local storage isn't online very early on. The libc literally has to open its own program executable and locate the the thread local storage and mmap a copy of it for each thread. Thread level storage comes online late in Linux, which bloats statically linked executables with code to parse their own executable.

In Sortix, I just have the kernel set up the TLS for statically linked executables and just declare errno as:

__thread int errno;

That means errno is online from the very first instruction in _start in statically linked executables, without the need to parse the program file in early libc. There's no error conditions between _start and main. This is the kind of implementation quality I want to have in Sortix and part of why I develop Sortix.


Ah, that's very neat. Thanks for explaining.


Author here. I'll probably omit the word 'modern' in the next release. Not for the reasons listed here, but because a bunch of stuff purports to be modern while forgetting the lessons of the past.

I implement POSIX not for the sake implementing POSIX, but because it allows me to port a lot of the software that's already written. The core POSIX specification is fairly alright and not that intrusive in my design, the worst parts of POSIX are in optional sections like XSI that I simply omit implementing. I implement a lot of extensions found in Linux and BSD that enhance upon POSIX, while also providing a few of my own. POSIX doesn't say anything about the ABI and doesn't prevent other languages. Atomic file operations are dear to my heart and something I'd like to extend upon in Sortix. Note that POSIX does specify rename(2) is atomic. I implement POSIX when it's convenient and omit doing so when not.

I'm happy to acknowledge the limitations of Sortix up front. It's important to establish this level of honesty early on to set the right expectations and establish trust. I warn up front about the security problems in Sortix (that exist at this time). If you follow the documentation, you should get predictable results with no nasty surprises.

I think Sortix is suitable for education projects. There's some more clean ups that can make it better. But it's of a reasonable size, it doesn't have that many dirty hacks, and it's fairly well organized.


Author here. Yep, though the network stack hasn't yet been merged to the master branch (but that's next and it'll be in the next stable release).


Author here. Yep, I don't want to force a particular bootloader on anyone. The bootloader is a piece of software owned by the system administrator, not necessarily by any of the several operating systems installed side by side. If I force a bootloader on the user, that makes dual boot configuration harder, and it's important to allow that. I happen to follow GRUB's multiboot specification, which has the advantage that a lot of bootloaders implement it. It's not perfect though and I'll probably invent and adopt my own bootloader protocol in the future, but the sysadmin's choice of bootloader continues to be important on my mind.


I used to start new coding projects weekly to play with one thing or another, not getting anywhere. With Sortix, there's now so many interesting areas to work on that I can work on whatever I fancy, and then still slowly accumulate useful changes. It's fun working on the components, but it's also fun putting a whole system together, and you learn a lot in the process.


Thanks! You shouldn't, but it could be an addition if you want something to tinker with. I've been dogfooding with it, for instance completing my functional programming university course using just it and a scheme port. I discourage comparisons because it sets unrealistic expectations rather appreciating it for what it is. This release is a base for future work and to be something that can benefit me in other ways.


So what you're saying is it's just a hobby and won't be big and professional like Linux? ;)


I appreciate your humble an honest approach - it's refreshing. I'll be sure and try this out in a VM!


Thanks! Be sure to let me know what you think.


Thanks! As Zikes say, a little competition is good and gitlab is working out fine for me. I used to be on gitorious and it got bought by gitlab so I moved. I prefer being on a platform I can theoretically port.


Thanks for hosting https://gitlab.com/sortix/sortix on GitLab! Feel free to email me at sytse@gitlab.com if you ever need anything.


Sure, it's just that most projects get hosted on Github these days, so I just assume all midsize open source projects are.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: