So in the beginnings of time it was /dev/null, but /dev/null felt so empty and lonely; so he created init... but init was envied by his brother systemd, that killed him..
>> There's a lot of technical debt that needs to be paid, but it's getting better.
You should just leave these sort of statements out of your introduction. It's generally assumed all projects have some degree of technical debt, and you'll lose more users (i.e. most) than you'd gain (i.e. 0) by trying to treat the subject with candor.
In other words, don't sell yourself short. Speak directly to why someone would want Sortix right away. In your intro, speak as if Sortix exists, fully formed, and complete. Let people come to their own conclusions about the quality.
For example, I'd rewrite the opening sentence from
Sortix is a small self-hosting Unix-like operating system developed since 2011 aiming
to be a clean and modern POSIX implementation.
To
Sortix is a clean and modern POSIX implementation.
Believe me, I've never released a project that I thought was complete. That's not because I've never released a project, it's because I'll probably never consider any of my projects "complete". There will always be more to add, more to take away, more to do. It adds nothing to my description to call my projects incomplete. The game is thus figuring out when to cut my engineering-self off and engage my sales-self.
I'm not trying to gain users. Sortix 0.9 is not permanently installable on real hardware from itself. The upcoming release will contain an installer for permanent installation, however. You are quite simply not my audience. Even if I did aggressively market myself, my OS will not be useful to most. If you installed it, you would quickly want feature X, such as networking or a GUI, and feel disappointed it does not live up to your unrealistic expectations. This is a small hobbyist operating system. The people I want to attract are capable developers and power users willing to actually put Sortix to use.
I'm not saying that you need to spend less time developing and more time selling. Your goals are your concern and your priority. I completely understand wanting to work on code and not put any effort into selling and let whomever show up that will. That has been my default state for the last 15 years.
But, while you said "I'm not trying to gain users", you also said "The people I want to attract are...". Those two statements aren't compatible. Developers (like me) are a type of user.
Whatever you want to call them--developers, users, minions, whatever--when your audience has several choices available to them for how they spend their time, marketing is just the means by which we try to convince people to take our option over some other option.
Personally, I'm getting a little tired of being on my own for all of my projects, so I am making myself learn more about marketing. I had just hoped to share.
Being German, I think rather differently (probably this is a different culture; US citizens might think differently) about this. Consider
Sortix is a small self-hosting Unix-like operating system developed since 2011 aiming
to be a clean and modern POSIX implementation.
vs.
Sortix is a clean and modern POSIX implementation.
If it isn't yet a clean POSIX implementation, the second one is a blatant lie to a potential user (which they will and should not forgive). On the other hand, the first one is quite honest in that is clearly tells what is there and the clear commitment to reach a clean and modern POSIX implementation - sounds fair and honest.
I don't think BMW, with their slogan "The Ultimate Driving Machine", shares your notion of what it means to be German, then. Or even Volkswagen with "Das Auto", is it really the car, or just a car?
It'd be lying if he were to say "we have 100% POSIX compliance." Very few OS projects can claim that. It needs to also be version-qualified, as there are several POSIX standards and even Windows can claim compliance with some of the versions.
My point is that this information of the current state of the project does not belong in the introduction to the project. The fact that it is a Zero-Point-Something version number is information enough that the project is incomplete.
SpaceX "...DESIGNS, MANUFACTURES AND LAUNCHES ADVANCED ROCKETS AND SPACECRAFT". They don't add caveats about completeness or design flaws or anything of that sort in their introduction.
And my reduction is just a call-out. The introductory section of the site is three paragraphs and a sentence long. It's not an introduction at all, at that point. All of these extraneous details are specifically making the introduction less clear, not more.
> I don't think BMW, with their slogan "The Ultimate Driving Machine", shares your notion of what it means to be German, then.
Or maybe they understand that different marketing approaches are required in different cultures. The slogan BMW uses in German-speaking markets is "Freude am Fahren" (roughly, "driving pleasure", or to be somewhat more literal, "pleasure while driving"), which is a bit more modest than "The Ultimate Driving Machine".
So true. "The Ultimate Driving Machine" would rather be seen as confirmation of the "swaggerer image" that BMW sometimes has (and BMW is in my observation trying to get away from).
> I don't think BMW, with their slogan "The Ultimate Driving Machine", shares your notion of what it means to be German, then. Or even Volkswagen with "Das Auto", is it really the car, or just a car?
The slogan "Das Auto" for VW at least in Germany can rather be considered as a subtile hint that probably most Germans, when they think of a car, first think of a VW (hinting the deep interleaving of post-WW-II German culture and VW). At least that's what I see in this slogan.
Apart from this: There is a large difference between using "stupid" slogans (that can also be considered as something like mission statements) and claiming properties that simply are not there (fraud).
> The fact that it is a Zero-Point-Something version number is information enough that the project is incomplete.
Say, OpenSSL was 0.9 for many years and was at that time still highly stable and complete.
There is a wide gap between "very incomplete" and "basically ready", so in my opinion 0.x tells nothing, except the developers still see things to be done.
This sort of thing really annoys me. Everytime I need a new library or new software I seem to have wade through loads of unfinished, unmaintained solutions claiming to be "clean and modern" or some other buzzword.
> It adds nothing to my description to call my projects incomplete. The game is thus figuring out when to cut my engineering-self off and engage my sales-self.
It would add everything to potential user loyalty to admit where your project falls down. Once someone has spent hours using your product only to find out that the edge cases come too often or the implementation is incomplete they may never come back. If however, you state clearly what is missing then they may well watch for improvements.
SO I would go for something:
> Sortix aims to be a clean and modern POSIX implementation.
> You should just leave these sort of statements out of your introduction. It's generally assumed all projects have some degree of technical debt, and you'll lose more users (i.e. most) than you'd gain (i.e. 0) by trying to treat the subject with candor.
Man, if only you were here to advise that poor college student in 1991 who announced his OS project as "just a hobby, won't be big and professional like gnu"... he might have had a fighting chance of getting it off the ground and who knows where we would be today? :)
We don't live in the plucky, upstart 1991 anymore. "If 386BSD had been available when I started on Linux, Linux would probably never had happened." (http://gondwanaland.com/meta/history/interview.html). We live in today, a world that has several open-source OSes available, with users who are used to seeing projects on the internet.
The Carlsberg example isn't not modesty, it's false-modesty. It's just meant to sound cheeky, while still getting the message "best beer in the world" into people's minds.
The case of the Carlsberg slogan may not be Janteloven. However, if I were a betting man I'd say that the advertising creative who came up with it either knew about the concept or got the idea from some Danish executive's modesty.
There is nothing about niche audiences that make them particularly forgiving consumers. Quite the opposite, actually. Niche audiences tend to be the most critical. Don't readily hand them ammunition to dismiss a project early.
A niche audience might look past silly logos, or even adopt them wholehearted as part of their "other" identity. But they are still consumers and still need to be marketed to. In this case, a bad logo is better than no logo.
But bad copy is just bad copy.
Most people won't actually use any particular project they read about. Most of early-stage marketing (and posting links like this to link-share sites like HN) is about gaining mind-share. You're investing time now in getting your name out so that--6 months from now--people who will eventually become your core users will say to themselves, "yeah, I remember hearing about that."
And when they say that to themselves, they are going to retain that mental picture of the project from when they first heard about it. If that picture is "incomplete, pie-in-the-sky", then they will continue to think of it as that. You now have to fight against the long-tail of converting people over to the new normal of your project being "complete".
Granted, if Jonas Termansen has no interest in having users, then he should just ignore my post completely. But then, why did he prop up a website for his project, a project he's labored on for 4 years now?
If you put that kind of effort into something, you owe it to yourself to not sell it short.
I'm not saying you're wrong, but it does feel to me like you're encouraging Jonas to defect in a negative-sum game. He can get more users by engaging his sales-self, but his engineering-self is treating his users more respectfully.
You say "It adds nothing to my description to call my projects incomplete", but "incomplete" isn't really what's at stake. I agree with you that software is basically never complete. But some software is "production-ready" in some sense that I consider meaningful. And I think that
> Sortix is a small self-hosting Unix-like operating system developed since 2011 aiming to be a clean and modern POSIX implementation.
makes it clear (or at least strongly hints) that Sortix is not production-ready, while
> Sortix is a clean and modern POSIX implementation.
pretends that Sortix is production-ready, and I consider that to be disrespectful.
(I have also spent the last year working on a homebrew OS kernel, so please trust that my "why" isn't intended as an attack! For me, the answer was simply "to see if I can", and I really enjoyed the project, but I'd love to know what motivated you in particular - especially as you seem to have achieved a very impressive amount)
Ritchie and Thompson also sort of wrote C, at least, some parts of it. I fully understand when Mozilla writes Rust and Servo using Rust.
No need to limit things to POSIX compatibility, but merely achieving it is no mean feat — and POSIX is seriously C-oriented. Some people invent a new OS architecture, then implement POSIX on the top of it (see NT) — but this is an order of magnitude harder, I suppose.
When you implement a POSIX-compliant OS, you suddenly have a lot of ready-made open-source software that both serves its primary purpose and as an "integration test suite". For a new OS, you have to write most basic userland things yourself. This is again a lot of effort.
Order of magnitude strikes me as too high if you think about doing it ahead of time and factor it into your design. The harder part would probably be not letting POSIX compatibility cramp your design. For example, the use of fork() is in part an artifact of making a practical system run on very memory limited hardware (like 128KiB max for a program, half code, half data), there's no intrinsic need for it to develop solid software.
Some very smart and pretty motivated folks at GNU/Hurd project struggled for years with a similar, but a bit less ambitious, approach. You never know how deep a puddle is.
> Ritchie and Thompson also sort of wrote C, at least, some parts of it.
Given its open nature, there's no reason (except limits of time/skill) someone writing an OS in Rust couldn't also be advancing Rust and its libraries in the directions needed to support that effort, even if they are outside of Mozilla.
I won't mind to be a billionaire with superhuman abilities and unlimited lifespan, too! Unfortunately, we mere mortals often have to limit the scope of our endeavors somehow.
In some cases, especially new projects (like a new OS), I think the pain of using an immature-and-powerful language is less than using a mature-and-weak one.
Because the POSIX standards are laid out and ready to be picked up and implemented. If I were going to learn about operating systems by building an operating system, the first place I would look for a checklist of what is needed would be the POSIX standards. After implementing something similar, I'd start iterating my project into something unique. If you don't know what you're doing, a rulebook is a great place to start.
I assure you there are plenty of room for designing your own operating system even if you implement POSIX. POSIX is a pretty reasonable minimal system interface for C programs. I osdev for fun and to challenge myself and I find a very ample supply of interesting things to work on. If I went and did something different, perhaps in another language, it would likely be equivalent to the POSIX system concepts largely, except custom and probably worse. If I really wanted a custom design, I would want it to be at least a magnitude better.
There's plenty of good prior art to look at, e.g. Multics, ITS (not sure that's at all accessible) and Lisp Machines are my favorites. Even plenty of good stuff in the base Windows 32 API, which was designed with threading in mind.
Sortie, would you share what POSIX reference you used for the implementation? I wanted to read and understand it for a while, but I never made through the only one I found [1]. Maybe there are alternative sources?
I use that POSIX 2008 edition myself, and the PDF edition that I got through my university library subscriptions. I simply look up interfaces and headers in it. It's not a gentle introduction though to POSIX programming. But if you know the basics, it's useful to look up in. I generally use the http://wiki.osdev.org/Cross-Porting_Software method when porting new stuff, that is, I just cross-compile it. I see what doesn't compile, look it up in POSIX, and implement it.
I've been watching your posts for quite a while at osdev.org, sortie. Great job sticking with this! So many people (myself included) start on an OS dev project only to get bored or give up a few months in. For anyone interested in hobby OS development who isn't familiar with osdev.org, check it out! They have a great wiki with tutorials, as well as discussion forums.
Very cool. I love seeing these home made operating systems. Nice to see an in-house C implementation! The feature list is very impressive. Screen shot of GCC running in the terminal is straight up smooth!
I haven't been able to get chvideomode to work under Virtualbox. The OS itself is rather cool, I think I will try to write a simple graphical demo to try it out.
I appreciate you actually trying my OS and leaving a comment. chvideomode really should work under VirtualBox. If there's a bug on my end, I would really like to fix it. Could you show up in #sortix on Freenode IRC for a debugging session?
It's amazing how far you got alone. Respect.
I'm also too curious on the "why". While I greatly respect the achievement, I'm sad to think it's wasted effort.
I deeply wish you have a secret strategy - while I doubt.
My utility function is to write a good operating system that I like. Any effort towards that goal is not wasted. If I can use it on my computers, which I can, I'm happy. Note the existence of secondary benefits. Sortix libz is a cleaner fork of zlib, and other portable replacement libraries are underway. Other hobbyist OS developers learn from my work and advise. I make third party projects more portable and file upstream bugs. These things benefit all of us, regardless of the market share of my OS.
(But seriously, purely from the feature list, this looks like an incredible achievement.)