ExectOS – brand new operating system which derives from NT architecture
exectos.eu.org
exectos.eu.org
I am excited to introduce ExectOS, a new open-source operating system built on the powerful XT architecture, a direct descendant of the time-tested NT architecture. With ExectOS, you will get full NT compatibility.
As a free, community-driven project, ExectOS not only incorporates clever ideas from other open-source initiatives but also stands out with our own unique innovations that set it apart. We've designed it to support both i686 and x86_64 architectures. It should be also easily portable to other architectures.
Dive into the world of ExectOS and join us in shaping its future. Learn more on our website at https://exectos.eu.org/, where you can explore our vision. If you are ready to be part of the conversation, our Discord server at https://discord.com/invite/zBzJ5qMGX7 is the perfect place to connect, collaborate, and contribute.
"Unlike the NT™, system does not feature a separate Hardware Abstraction Layer (HAL) between the physical hardware and the rest of the OS. Instead, XT architecture integrates a hardware specific code with the kernel. The user mode is made up of subsystems and it has been designed to run applications written for many different types of operating systems. This allows us to implement any environment subsystem to support applications that are strictly written to the corresponding standard (eg. DOS, or POSIX)."
The issue is that WoA kernels have moved away from heavily embracing hal.dll, instead inlining a lot of functions into the kernel that used to be hal.dll functions for perf reasons. If they kept the original architecture it would have been easy, but they've changed it fairly recently to be less portable.
Isn't this a bad idea?
When you're compiling the kernel you're able to toggle various hardware flags to add to the compilation.
And AMD graphics cards generally work better then NVIDIA (on Linux) because the official drivers have been upstreamed vs Nvidias that haven't
LionsOS[0] is an effort by the seL4 foundation itself.
Makatea[1] is trying to implement a Qubes-equivalent on a safer seL4 base.
Genode[2] is an OS framework built around capabilities that supports several microkernels including seL4 itself.
Thanks for sharing!
It's spelt DOpE[0].
Source: I wrote this.
> "Keep the greatest advantages of the NT™ architecture, while implementing new features and technologies known from other Operating Systems."
Wouldn't hurt to hear what the greatest advantages of the NT architecture are from the author's POV...
Now I use and like Linux and macOS and iOS, and I strongly dislike Windows. But I don't think I would find it difficult to find advantages to NT's approaches to certain problems over the UNIX-style approach to the same problems. For example, the idea that pipes send structured objects rather than text is interesting and has definitive advantages (and disadvantages) compared to UNIX's text-based pipe model. Its filesystem permissions layer is also way more flexible than UNIX's, with hooks for arbitrary programs to inspect file accesses, which has advantages (and disadvantages). And its GUI-first approach to everything, where everything is primarily configured through some GUI rather than a command line or text file, has obvious advantages (and disadvantages). And although I don't understand it very well (again, not a Windows user), what I hear from HyperV is pretty cool.
NT is super interesting as the only serious alternative to UNIX-style systems. There is value in studying it, even if I find the overall experience provided by Windows to be much, much worse than my Fedora desktop or my macOS laptop.
Maybe you are thinking about Powershell. Powershell is interesting (although in practice I find it not very practical to use), but is quite another subject than NT. It's really also its own segregated world, that relies on dotnet, that is really another platform than NT (although in the first place implemented on top of it, and of course there are some integrations)
Windows ACL are powerful in theory but hard to manage in practice. Look at this fine textual representation for example: "O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)". Hum; at least ugo+-rwx you can remember it, and actually POSIX ACL are also easier to remember than Windows ACL.
Windows NT is not even that much GUI first. There are tons of things that you just can't access through a GUI, let alone a user friendly GUI. Funny example: ACLs on tasks from the Task Scheduler: no GUI access at all. It would probably not even be too hard for MS to plug their standard permission Window so that you can access them with the GUI, but they never did it. So much for the GUI first. Oh, I'm not even sure it has a command line interface to set the ACL there. Maybe just the Win32 API.
I also don't think there is an integrated Windows tool to view for examples the processes in a tree, even less to show Win32 jobs.
HyperV by itself has nothing revolutionary but there are a few interesting ideas that it can bring when integrated in a few Windows component (some security related sadly reserved to Entreprise version, because it is well known that in 2024 making good security architecture unreachable from the general public and SME is a brilliant idea). But compared to Qubes OS for example, it is very little. Oh there are also no Windows GUI to show HyperV states for these integration (as opposed with regular full system VMs)
Now I still think there are a few good ideas in NT, but the low level layers are actually not that far from Unix systems. It's closer than Cutler would admit. (In particular, there are not so much differences between "everything is a "file"" and "everything is an "object"", at least when you look at what Linux as done about "everything is a "file"" -- this is quite ironic because Cutler particularly disliked the "everything is a "file"" idea)
Because any ol’ Surface ships as a secure core pc which utilizes virtualization for memory security etc:
https://learn.microsoft.com/en-us/windows-hardware/design/de...
And it doesn't help that UWP and C++/WinRT turned out such mess that even Microsoft own teams rather use Webviews than native UIs.
https://techcommunity.microsoft.com/t5/microsoft-teams-blog/...
https://blogs.windows.com/windowsdeveloper/2024/06/03/micros...
https://github.com/microsoft/microsoft-ui-xaml/discussions/9...
Each handle has security descriptor/ACLs, not only a files, and format is the same. Each handle can be waited for fr with same system call, and you could mix and match file, socket and process handles in same call.
ABI for device drivers allows to add support for new hardware without recompiling the kernel.
First-class support for multithreading, Vista even added thread pool to the userland API.
Efficient asynchronous APIs for IO including files, pipes, and everything else. Linux only got this recently with io_uring, NT implemented IOCP decades go in version 3.5.
NT security descriptors with these access control lists and nested security groups are better than just 3 roles user/group/root in Linux. This makes launching new processes and opening files more expensive due to the overhead of access checks, but with good multithreading support it’s IMO a reasonable tradeoff.
Related to the above, CreateRestrictedToken kernel call for implementing strong sandboxes.
Good GPU support, Direct3D being a part of the kernel in dxgkrnl.sys. This enables good multimedia support in MediaFoundation framework because it allows applications to easily manipulate textures in VRAM without the complications of dma-buf in Linux.
Related to the above, GPU-centric 2D graphics (Direct2D) and text rendering (DirectWrite) in the userland API.
NT has ACLs for everything. Each handle (read: descriptor) has associated ACLs.
Also, each handle can be waited ("selected") with same system call. No select()/epoll() vs wait() distinctions. Nw Linux has timerfd and procfd and others, but NT had these from birth.
In some way NT is more UNIX ("everything is a file") than UNIX itself.
• Disk volumes and physical disks
• Pipes
• Registry keys
• Processes and threads
• Inter-process synchronization primitives like mutexes, semaphores, and mailslots
• Shared memory sections
• Desktops; you need to pass access check before interacting with a desktop. The OS has multiple of them, used for fast user switching, concurrent remote desktop sessions, UAC prompt, logon screen.
• Other, more exotic things like job objects, windows stations, and ALPC ports.
To be fair, some of them are protected with ACLs on Linux because they are mapped into the file system. For example, physical disks are visible in the file system and the kernel does apply these security things to them.
I’m not sure Cairo is comparable to Direct2D, the ecosystem is too different.
On Windows, Direct3D 11.0 is guaranteed to be available. Even on computers without any GPU (like most cloud VMs) the OS uses a decently performing software emulation called WARP. For this reason, Direct2D is designed from the ground up to use these shaders as much as possible, and it shows because hardware GPUs deliver way more gigaflops than CPUs. For example, on my computer D2D implements anti-aliasing on top of MSAA hardware.
Cairo is cross-platform, and Linux doesn’t have a universally available GPU API. Some Linux computers have GL 4.5+, some have GLES 3.1+ (both GPU APIs have approximate feature parity with D3D11) some others have none of them. For this reason, Cairo renders vector graphics on CPU. Some computers, with slow CPUs and high resolution displays, don’t have the performance to render complicated 2D scenes in realtime on CPU.
This may change some day once Vulkan support on Linux is ubiquitous, but that day is yet to come.
Linux does not have anything similar to Direct2D, despite it’s technically possible to make it. Here’s a proof of concept for ARMv7 Debian (Raspberry Pi4), on top of GLES 3.1: https://github.com/Const-me/Vrmac/?tab=readme-ov-file#2d-gra...
Sure it does: WINE. Not only is it similar, but it's the exact same API & ABI.
And sometimes minor hardware revision of these Mali GPUs change the internal API between user mode and kernel mode halves of these Linux GLES drivers.
The kernel handled it pretty well as it supported both hardware revisions. But my user mode app failed because the new hardware required a different version of that libmali-midgard*.so DLL.
Unlikely to happen on Windows because the GPU driver installs both kernel/user mode halves of the driver in one transaction. Linux doesn’t have ABI for drivers, all kernel mode drivers are pre-compiled into the kernel.
That's why free software should be a requeriment at least for drivers.
I remember the -fake Intel- GMA500/3000 fiasco. My old GL 2.1 based n270 netbook it's still supported and with a small ~/.drirc it fixes some quirks as it MESA misdetects it as a GL 1.4 device, but overall it's tons better than the PowerVR chipset with an Intel coat.
The GMA500 users are stuck even without EXA.
I’ll bite. POSIX permissions are lousy, and NT permissions are mostly worse. It’s way too easy to mess up, and it’s way too hard to specify a sensible policy like “only a specific user can access such—and-such path”. At least NT can restrict directory traversal.
S3 got it right when they deprecated object-level ACLs.
> This makes launching new processes and opening files more expensive due to the overhead of access checks,
fork() is terrible and slow. CreateProcess is overcomplicated, but creating a process directly is a vastly better design IMO.
> but with good multithreading support it’s IMO a reasonable tradeoff.
Huh? Linux has had proper multithreading support since NPTL, which was a long time ago. Windows, in contrast, didn’t have reasonable support for multithreading on systems with >64 CPUs until Windows 11:
https://learn.microsoft.com/en-us/windows/win32/procthread/p...
I assume this is related to the way that Windows leaks all kinds of bizarre threading details into the user ABI.
I will grant that Linux’s original threading was an abomination.
> Related to the above, CreateRestrictedToken kernel call for implementing strong sandboxes.
Eww. The Windows sandboxing scheme is IMO an overcomplicated mess. Seccomp is not particularly friendly, but it does exactly what it says on the tin, and I would be far more comfortable running untrusted user code under seccomp than under Windows restrictions from token, jobs, integrity, etc.
Like NT? It is in fact the UNIX-likes that are compelled into a fairly ancient stream-of-bytes model; NT (and Windows atop it) understands that data needs to have structure, and imposes structure on that data at an OS level; everything is a manipulable handle, rather than an opaque block of memory to be written to/read from, arbitrarily.
PyParallel: How we removed the GIL and exploited all cores -
https://news.ycombinator.com/item?id=7861942
The speaker's HN profile for additional commentary on this topic -
I really do like NT internals though.
When asked people point to IOCP vs epoll, but I'm not sure how relevant it is now that Linux has io_uring.
(They also point to stable ABIs for drivers, but I am more interested in internals)
https://windows-internals.com/i-o-rings-when-one-i-o-operati...
Yes, memory wasn't as plentiful back then and with single-core machines there still would've been more unavoidable context switches but with queues the context switches could've still been reduced in total as opposed to crossing the kernel boundary at all.
https://learn.microsoft.com/en-us/windows-hardware/drivers/d...
What kind of desktop would this run actually? The Windows shell, the ReactOS shell, some Unix DE (KDE or so), or some own custom desktop environment? I'm not sure if the latter is a good idea, as this would be a whole big project on its own?
What hardware does it currently support? (Either via their own drivers or via the NT compat layer?) E.g. does it support the common things, video output, keyboard input, network?
I think it would be good if the homepage would clarify the current status, and maybe show some high-level changelog of the recent changes, and some roadmap.
I would say you’re a while away from running a desktop.
If I had to guess, I would say they are probably going for Powershell, or something similar; and that would be an incredible achievement already. A desktop environment is way to far out of reach for the time being.
If you're into microkernels and/or the NT kernel model, I highly recommend checking it out
maybe with AI we can all get bespoke heuristic intelligent operating systems? these could be almost impossible to crack and exploit.
I think the point is that people who whinge (like here) about Unix are actually complaining about Unix filesystems and user-space. I'm not so sure they care about how exactly privileged execution is partitioned (or not).
I switched to "classic" mode so automatically on every install that I'd forgotten the Fisher-Price default one... which was still better than the current shitshow.
There are strong structural similarities in the source tree and there are also source files that seem completely copypasted with comments changed and function contents gutted (such as ke/sysres.c, ke/runlevel.c, among others).
Are you one of the Minoca developers working on a new project or are you defrauding Hacker News for attention?
Edit: This same poster (Rafal "Belliash" Kupiec) has been noted for other plagiarism incidents going back to 2005:
https://github.com/reactos/reactos/pull/2853#issuecomment-65...
https://lists.reactos.org/hyperkitty/list/ros-dev@reactos.or...
The decision may or may not be correct though as ReactOS maintainers can be paranoid for the first commits of new devs. Mostly, people play with IDA and try to write some code for a small portion, which is against the project's philosophy.
https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures...
Are there any other operating systems without HAL?
Which is also related to how original NT used them. ARC (and its PC BIOS-based emulator, NTLDR) provided early boot ability, HAL provided "driver" to access platform, and the NTOSKRNL itself didn't have to worry so long as it was running on same base ISA and had all the necessary drivers loaded.
So for example on x86, there were HAL.DLLs for PC BIOS, "standard" PC BIOS multiprocessor, ACPI (uniprocessor and multiprocessor variants), Sequent, SGI Visual Workstation, etc.
The rare custom HALs were mainly for things like x86 NUMA systems, or from ports to alternate architectures.
I understand that there have been concerns raised regarding the uniqueness of the code in my project. I want to clarify that I have a broad exposure to various open-source projects, including Boron, Carbon, Minoca, Palladium, and NeptuneOS, among others. My interaction with these projects is purely for educational purposes and to stay informed about different coding practices within the open-source community. This does not equate to copying their code for my own projects.
I utilize a programming tool called Codeium, which is equipped with AI capabilities based on the GPT-4 model. This sophisticated tool assists in generating code suggestions and snippets to aid in the development process. It is important to note that while Codeium's AI provides recommendations, it does so from an expansive dataset of open-source, properly licensed public code. However, as a developer, I exercise discretion over which suggestions I implement into my codebase. The AI's suggestions are merely a starting point, and I often enhance or modify them significantly in the context of my work.
In light of the concerns raised, I am committed to conducting a thorough review of the code in question. Should I find any similarities with the Minoca project, I am prepared to take the necessary steps. This may include rewriting or removing the code entirely, or appropriately crediting the original authors as per the licensing agreements and norms of the open-source community.
I take the originality and integrity of my work seriously and appreciate the opportunity to address any issues that may arise. Thank you for bringing this to my attention.
Firstly, I must emphasize that I have never accessed or reviewed the source code of WRK. My work on ReactOS's LPC improvements was conducted through legitimate reverse engineering practices. Reverse engineering is a recognized method for understanding system behaviors and is protected within the European Union under certain conditions as outlined in Directive 91/250/EEC and the Trade Secrets Directive 2016/943.
The system from which I reverse engineered had reached its End-Of-Life (EOL), and under the original licensing terms, reverse engineering for compatibility purposes is permissible. My intent was to ensure interoperability and enhance the functionality of ReactOS, which is a legally acceptable and common practice.
In the process of enhancing the LPC mechanism, I integrated the improvements with pre-existing code to form a coherent and functional system. The new function that I implemented, despite being short and the subject of criticism, was composed of calls to existing functions and references to global variables that are part of the ReactOS project. This function was necessary for the improved LPC mechanism to operate correctly within the system's context.
What are you looking for to distinguish from a unix like system?
At what level of the stack are you looking for things to stand apart?
Consider that for many folks today, the Operating System interface is not much more than an HTTP/S socket. Where Unix was "everything is a file", today it's, almost, "everything is a POST" (I appreciate this is a broad brush).
At this level, the underlying OS is mostly shrouded.
The OS doesn't determine the user interface. We conflate the two, but that's not necessary. A unix system would happily accommodate a Window 3.1 style interface, if that's what you wanted.
Those in the field will kibitz about how one "serialized object" protocol is better/worse than the other. But, in the end, most of it doesn't really matter. Not at a human scale.
Sure, when you have half the planet using your services, and you measure your computer power in hectares, and power budget in Megawatts, small gains are big gains.
But however we, say, talk to a printer? How the handshake is managed before we dump a 20MB photo into it, doesn't really matter so much.
With our trend of just wrapping execution contexts into more and more context wrappers (threads in processes in containers in vms), there's so many layers to penetrate, we've not quite given up on the security of kernels, but they're certainly less important. Do we really need something like a capability system anymore?
none of those people care whether it's apache or nginx or something else handling the socket, or what kind of socket it is, or how app routing works, or how that app accesses storage, allocates RAM, etc.
Nobody cares what something is coded in.
Why do we have more than one database? In fact just storing data in the file system was more than sufficient Nobody cares how data is stored.
The answer is that they are all crucially important and we still have engineers and creators who want to innovate and push the borders of what is possible. invent new and improved ways to accomplish what we are doing and extend what we will be able to do.
100% Non-starter, such a shame.
Wine implements Win32Api only, while ExectOS is a featureful Operating System, that implements a compatibility layer with NT™. This means, ExectOS will be able to run NT™ drivers as well, not only Windows® software. However, thanks to its modular design, it will be possible to implement Win32 subsystem as well at some point, based on Wine.
Why don’t you help ReactOS?
ExectOS goals are very different from ReactOS, and contrast the project’s core philosophy as being quite on different paths. While ReactOS aims to replicate Windows® NT™, ExectOS is a completely new Operating System implementing the XT architecture which derives from NT™. Although both projects share the goal of being NT™ compatible, they intend to achieve it in different ways. What ReactOS tries to replicate, ExectOS only implements as a compatibility layer. Thanks to that, ExectOS does not need to strictly follow NT™ architecture and is capable of providing modern features."
ExectOS seems highly interesting -- basically it can be thought about as an open-source OS that can run Windows binary closed-source drivers...
If ExectOS is going to do this (and apparently it is!) -- then let me propose the following use-case and corresponding suggestion...
First, the use-case: I think it would be great to run a headless (non-GUI) OS infrastructure capable of hosting Windows binary closed-source drivers on a different networked piece of computer hardware.
For example, let's say I have an old PC.
An old PC with some expansion card or piece of hardware that is not produced anymore, where the vendor went out of business years ago, where there are no open source drivers -- where the only thing that remains is the ancient hardware and the ancient proprietary closed-source driver...
OK, now let's suppose that I can run the ExectOS OS infrastructure headless on that old PC along with the ancient proprietary closed-source driver (I use a second attached modern networked PC with GUI, remote shell, debugger, etc., etc. to connect with and control the old PC...).
Well, that would be awesome, because then ExectOS could be used to isolate, debug, and potentially understand (better) old Windows binary closed-source drivers for old (ancient?) attached hardware devices that are no longer produced, where open-source drivers are not available...
So the suggestion: Via IFDEFs, compilation flags, conditional compilation, etc., create a headless (but still with built-in networking and/or the ability to run a network driver) version of ExectOS -- for the purpose described above.
All I know is that if that version was created, then the old/vintage hardware restoration/documentation community -- would be forever in ExectOS's debt...
Anyway, ExectOS sounds great! (Could it be made to work on old 386's?)
Also, it's completely not obvious from your web pages which features already work in your OS. And, IMHO, Discord is definitely not "the perfect place to connect, collaborate, and contribute".
Just my 2ct...
> Do you have any kind of tests to check if the code is working as expected?
> We don’t need tests. If it compiles, it is good enough; if it boots up, then it is perfect.
As something to be presented to the wider world, with a desire to have (testing) users and contributions... Hmm.
Source: Torvalds, Linus (1998-04-08). linux-kernel mailing list. https://lkml.iu.edu/hypermail/linux/kernel/9804.1/0149.html
Obviously Theo has his detractors, rightfully so. And the language he uses in that post is not what I would use at all. It's downright unacceptable. But at least it's something - a thing from an authority you can point to and say "this is why!"
> gcc is the worst compiler except all those other compilers
- Winston Churchill
"This is a LLVM/Clang/LLD based mingw-w64 toolchain". Ahh LLVM :D
No.
Two decades ago I could be willing to accept this kind of comment from the 'FLOSS' community if it was about a proprietary vendor (especially microsoft). Nowadays, this behaviour is only useful for pointing: 'look they are still acting like teenagers'.
Personally, I much prefer those hobby projects which focus on code instead of publicity.
Personally I wish more professional projects followed this school of design instead of publishing cookie-cutter landing pages slathered with hero images and feature cards.
> this elaborate public website to try to make their hobby project look really serious and professional and important
You evidently have a very low bar for what qualifies as "elaborate" and "really serious".
>No. ExectOS is not funded by the European Union; however, it is a project led by Europeans committed to adhering to EU laws and regulations. While the project has its roots in Europe, we wholeheartedly welcome all individuals around the world. Everyone is invited to join, use, and contribute to ExectOS, fostering a truly global community.
Why don’t you help ReactOS? ExectOS goals are very different from ReactOS, and contrast the project’s core philosophy as being quite on different paths. While ReactOS aims to replicate Windows® NT™, ExectOS is a completely new Operating System implementing the XT architecture which derives from NT™. Although both projects share the goal of being NT™ compatible, they intend to achieve it in different ways. What ReactOS tries to replicate, ExectOS only implements as a compatibility layer. Thanks to that, ExectOS does not need to strictly follow NT™ architecture and is capable of providing modern features.
Do you intend to cooperate with ReactOS to achieve common goals? No. We share Wine’s opinion on the inappropriate reverse-engineering methods used in the ReactOS project, as well as its association with the TinyKrnl project, which used every possible method of achieving the end result of having a 100% compatible results. This especially applies to the so-called ‘dirty’ way.
This response really only answers the question for a select few people familiar with the windows reverse engineering community drama.
"Don't look at ReactOS code either (not even header files). A lot of it was reverse-engineered using methods that are not appropriate for Wine, and it's therefore not a usable source of information for us. [1]"
I've never figured out why the inordinate delay given that millions are unhappy with Windows and Microsoft generally. You'd reckon open source developers would be falling over themselves to join such a project but it seems not.
Perhaps there's something about how the ReactOS project is run that I'm unaware of that puts people off. The other problem is trying to find out news of the project, the ReactOS website goes dead for many months at a time and updates are at times years apart. You'd reckon its developers would be much more communicative, and I reckon this is one of the reasons why there isn't more interest in the project.
The fact that ReactOS is going nowhere is most annoying, having no alternative O/S to Windows is a real pain.
BTW, I've tried every every release for years and I have been unable to get a stable enough release to run even one dedicated task. (Some of my tasks such as email or wordprocessing could be put on a dedicated machine so it was the only user-installed software, that way an unstable O/S wouldn't be stressed too much but unfortunately with ReactOS even that idea hasn't worked out.)
What you are in effect saying is that Microsoft has essentially killed the ReactOS project off. Are you reasonably sure about this? The reason I ask is that I was under the impression that to overcome any MS code issues that ReactOS was porting Wine code (this ought to be clean).
A supplementary question, as ReactOS is using Wine code what parts still have to be coded that might be in conflict with MS's proprietary code? This question relates to my earlier point about how little info developers are providing potential users. The lack of info doesn't doesn't sound good nor does it offer users much hope.
I've been waiting about 20 of ReactOS's 26 years, unfortunately it seems to me I'll be dead before it's ready.
The other developers disagreed and Hartmut Birr quit the project.
And I come from the perspective of other large niche OSS projects.
Agreed, it's why I've advocated a halfway 'house' to overcome the problem and pay for the project's development.
It goes something like this (but no doubt there are many suitable variations): create a nonprofit cooperative organization/society that is revenue neutral to develop programs and pay developers a reasonable wage. Employment could be flexible, the organization could employ both full-time and part-time developers (this would help those who've a keen interest in the project but whose principal job is too valuable to let go etc.)
In effect, this software has a cost but it would be very much cheaper than products from Microsoft, Adobe, etc. Also, licensing would be less restrictive—say make the product still cheaper or even free if one compiles the code oneself. There are ways of releasing the code so someone doesn't release a compiled version (each source could be different, have individual certificates, etc., thus compiled versions would individually identifiable), but I'd reckon the price would be so reasonable that it wouldn't be worth the effort.
By revenue-neutral I mean the price of the product would not only cover wages, administration but also necessary reserves. I've mentioned this concept on HN and elsewhere previously for software such a Gimp, LibreOffice and so on.
I'm somewhat surprised there aren't any software organizations that use this development model.
Even take ReactOS, why in the world would a org use it when you could just license Windows properly with PCs pre built and have the accountants depreciate them into taxes as they are capital equipment.
If someone needs an old Windows kernel for compat, they'll just keep using that old Windows version they have on a box and not waste engineering labor to migrate it.
Combining a bunch of projects like that under a halfway house increases revenue but does not mean it will be revenue neutral. It'll still be in the red.
End of the day, there are reasons why some OSS stays completely free while others have commerical and free operations ran in parallel. Either it can bring in money or it can't.
It seems a lot of people look at the success of Linux and *BSD and assume that it's easy once people put their heads together, but what they're missing is:
A. Way more people had direct experience with Unix kernels by the early 1990s due to things like source available licensing and Lions' annotated Unix V6 source code being used as a university textbook since the late 70s. In the case of BSD, the code was mostly written already, they just had to get through the AT&T lawsuit and then remove the 6ish files that were deemed to be AT&T's IP.
B. Specifically for Linux, the project got a lot of financial and manpower support from big established companies like IBM and Oracle once it became clear that Linux could be a commercial Unix killer.
ReactOS doesn't get any of this. While there have been source code leaks, Microsoft remains very secretive about NT's internals and protective of its source code. Unlike with Unix, there's no NT-family of operating systems for people to draw knowledge from. There's NT and there's OpenVMS as a sort of distant cousin, neither of which are open source.
For what it's worth, I do think that ReactOS's goals are orthogonal to what people really want, which is the ability to run Windows software without needing to deal with Microsoft. You really don't need the NT kernel in order to do that, you just need a robust userland compatibility layer. I think this is why Wine has been so much more successful (especially now with Proton and SteamOS) than ReactOS.
I still dream to one day have an OSS Windows replacement that's like a Windows 7/XP/2000 desktop but with modern kernel features, APIs, and security patches. But I think the more likely future is compatibility layers for gamers and the continuing death of desktop computers for anyone who isn't an enterprise or enthusiast.
It is cool that ReactOS can run windows drivers natively, though that seems to go against the values of open source
Linux with Wine is fine in its own right and I use the combination but it isn't a true substitute for the ordinary user who has been used to using Windows for decades. Witness the pitifully small numbers of Linux desktop installations compared with Windows and the even smaller number of Linux users who use Wine. (Yes, I know Linux's desktop share has increase recently, and that's a good thing, but the numbers are still trivial.)
Seems to me pragmatism has to reign in the way that many users install Nvidia drivers on Linux. Granted, it's not the ideal for open source but the compromise is better than the alternatives.
May I introduce you to GNU Hurd? First release happened 34 years ago.
https://en.wikipedia.org/wiki/Tandem_Computers: 1974 (50y) (semi-dead)
https://en.wikipedia.org/wiki/QNX: 1982 (42y)
https://en.wikipedia.org/wiki/VxWorks: 1987 (37y)
https://en.wikipedia.org/wiki/GNU_Hurd: 1990 (34y)
https://en.wikipedia.org/wiki/4690_Operating_System: 1993 (30y) (these run the self-service touchscreens at Costco's food section, IIUC)
It's surprisingly hard to query for "graph intersection between earliest first release date and most recent release date" :(
edit: clarification
My guess is that the intersection of people who don't need need bug for bug windows compat (so aren't are stuck on real Windows) and those who really care about the NT compatibility at the kernel level is about zero.
> having no alternative O/S to Windows is a real pain.
That really depends on what you count as an alternative, doesn't it? As far as regular applications are concerned Linux + Wine is a pretty good alternative.
This is great and all, except that the linux experience is about a 3/10 for people who are trying to leave windows. Especially when the core of using linux is still so incredibly CLI heavy.
It's kinda like having professional race car drivers build cars. They end up being fast, efficient, nimble, and easy to repair. But driving them is difficult as hell, the drivers seat looks like an apache helicopter cockpit and the clutch is so stiff and throttle so sensitive that you almost always stall or lunge. But it does have an automatic "beginner" mode, never leaves first gear and the throttle becomes slush, but it will get you from A to B around town, mostly. Great for grandma.
I think there is a strong misconception that there is this massive pool of open-source devs twiddling there thumbs just itching to jump in on some project were they can pour time and effort for nothing more than the "good of the community". I don't have any sources for this, but it my strong suspicion that the vast majority of "open source" contributions are actually done by contributors that are compensated either by a company that doesn't mind paying their employees to work on open source projects, or by a foundation behind the open source project. Take Go-lang for example, originally created by Google, then opened up. I am sure there are Google employees that still contribute (on Googles dime) to the project. Why would Google do this? Why not keep the Go just for themselves? Simple, if they open it up and can get other people/companies to use it, then they can make future hires where they don't have to train everyone on a proprietary language.
ReactOS doesn't have a large foundation behind it, and it doesn't make sense for companies to allow their employees to develop and contribute to it on their dime.
Development is skilled labor, especially for an OS. Dev's need to eat, need a home, etc. I don't know a single dev that is itching to give away their skills for 0 compensation. The only time devs really do that is when it is a personal passion project.
I actually think this is a wider societal issue. People love calling for work to be done in some abstract sense ('someone should really...', 'they should make it so that..'), but who is this 'they'? Or this 'someone'? You? Because you're either volunteering yourself, or you're 'volunteering' someone else for the job, there's no third option.
There's this general sense that everything will be (or is) documented; every tool made, every itch scratched. But unless the incentives (money, fame, prestige, personal fulfilment, love, curiosity, self-expression, etc.) are there for someone to do it, it won't get done. Most things will never be done.
So if someone says "I don't understand why X hasn't been done", I feel like an appropriate response is to ask why they haven't done it. And generally, whatever reasons they give, those reasons will be a good explanation why anyone else hasn't done it either.
The average user can't program let alone build an operating system. The same way the average driver cannot build a car. Or smartphone users cannot build a smartphone.
Users have requirements of their tech and the more experienced they become the more they reqire of their tech. The trouble is that with the monopolies that run Big Tech their monopolistic practices give them little incentive to provide features that benefit users, instead the new features benefit them.
I could give you numerous examples of software that requires new features but no attempt has been made in decades to add them. Take Windows, whatever happened to the WinFS file system? It's sorely needed but MS and Big Tech generally want users to use Cloud storage and that benefits them, WinFS would help sidestep that. Windows and Windows Explorer need major extensions to the file attributes sysyem, Explorer needs major ergonomic enhancements to make file manipulation easier, and that's just for starters.
Without real competition none of this will occur, not even Linux and Apple can fix this because of their differences, they too are moribund in their own ecosystems for the sane reason.
Meanwhile, users like me have unfulfilled needs that are quite technically within the means of existing computers and well within the capabilities of tech companies to provide but these needs still remain unfulfilled after decades.
That we are nearly 80 years into the computer revolution and users still cannot perform simple basic tasks on a PC that have been straightforward commonplace operations in a paper-based filing system for hundreds of years just isn't good enough.
The fact is it's impractical for users of modern tech to start from scratch just because Big Tech doesn't fix bugs or add much-needed features. Unfortunately, attitudes like yours do not help.
Marx once said workers need command of production, these days I'd alter that to users need command of production so they can get the necessaries to do what they need to do.
Why anyone, reads, or cares at all about Marx, is beyond me. The guy was the biggest fucking loser bum to ever exist. He was constantly hitting up family for money, never had a real fucking job, was an absolute slob of a human being, treated is children like dog shit, and in general was too impressed by his own "intelligence".
It's also a solution to a problem that largely doesn't exist. The people working on it do so for fun, not because they need Windows but not made by Microsoft. The parent comments says "having no alternative O/S to Windows is a real pain" but it's not a real pain to any significant amount of people.
I think that would be Project Xanadu, started in (depending upon what you consider as "starting") in 1961 or 1965.
Let me explain. I don't have hard numbers on this, but I'd venture to guess that a vast, vast majority of funding/code-time-donations towards Linux is specifically for making server infrastructure more stable. Fortunately for the community, these changes get pushed upstream and also fortunately a lot of them end up also benefiting the desktop environment as well.
Windows does have a server presence obviously, but I think if you're using a Windows server, you're not going to drop it and replace it with ReactOS (even if it were less unstable); you'd probably move to Linux with .NET Core. I don't think any company is going to fund the development of ReactOS on server, or as any key part of infrastructure, and so the only thing that React has is consumer desktops.
I don't think there's a lot of funding going towards consumer products; I'm not saying it's zero, but even for Ubuntu and Canonical or Fedora and Redhad, I always kind of figured that the desktop OS's were effectively loss-leaders for commercial clients. I think the final nail on the coffin is Valve and Proton; for awhile Microsoft still basically had a monopoly on games, regular Wine was hit or miss, but Proton keeps getting better and better, to a point where I almost never have to worry about a game not working on my Steam box. Valve can continue to work on SteamOS specifically because they have funding in the form of people using their platform to buy games.
I was rooting for ReactOS for quite awhile, but nowadays I'm not really seeing the point of it. Linux driver support is actually pretty decent nowadays (particularly with AMD GPUs), it runs reasonably fast, and most applications have moved to web-based stuff anyway.
We believe, there is no ideal Operating System on the market. During ExectOS development, we try to bring most useful features known from existing solutions, while keeping compatibility with NT™ architecture at desired level.
Some of our ideas differ greatly from other projects and it is much easier if we do not have to fight legacy code and ideas.
We need the freedom to break things when necessary.
... those are reasons why the author is writing it, which I guess is a plausible answer.But there is no reason to use it as a user or application developer, which are the far more important Whys.
As a tangent, what will really impress me about AI/LLM is if major projects like this gain huge amounts of usable ported/translated code using the LLMs.
So you start a kernel, but we all know you need a desktop environment, graphics subsystems, shell environments, terminal apps, etc.
LLMs seem best suited for breadth-knowledge application. Porting of apps between apis that doesn't involve deep algorithms on a major scale would actually show me they are useful outside of parlor tricks.
Even if you're going for a microkernel design, there are still consequences to writing memory-unsafe code outside the core.
For me, the big advantages of Rust come from its assumptions about the memory model, and the rigorous checking it does to ensure compliance with those assumptions. But surely those assumptions cease to hold if you're the one defining the memory model, and most of your code involves shuffling memory around inside of `unsafe` blocks. What's the advantage of Rust at that point?
Not to mention, if those guarantees break, Rust will panic and crash, which - in a kernel - would mean bringing down the entire system. In a kernel context, even things like 'let' might fail. Either you let the system panic, and have yourself a kernel that topples over in a slight breeze, or you check for and try to catch these errors, which - well - is no different from C at that point. Linus Torvalds has noted some of his issues with Rust in kernel dev, and he's in a pretty good place to render his opinion.[0][1][2]
Imho, a better choice for a modern greenfield kernel would be one of the strictly functional languages: Haskell, OCaml, etc.
[0] https://lkml.org/lkml/2022/9/19/1105
True! But I think your characterization here of an OS kernel is incorrect. Certainly there will be more unsafe in an OS kernel than in your average user space application, but it should still be the minority of code. One thing that Rust documentation/tutorials frequently ram into your head in the chapters about unsafe is that you should be using unsafe only sparingly, to build small, auditable, hopefully-safe abstractions that the rest of your code -- safe code -- can use to get its work done.
That's just as true in a kernel context (and perhaps even more critical to understand and internalize there) as in user space.
> if those guarantees break, Rust will panic and crash, which - in a kernel - would mean bringing down the entire system [...] Linus Torvalds has noted some of his issues with Rust in kernel dev, and he's in a pretty good place to render his opinion.
And this is why the team working on The Rust-in-Linux project have been working with the Rust maintainers to provide alternate APIs that don't panic, and instead return errors, in these situations. Torvalds' feedback has been instrumental in driving these changes. The fact that Rust is in the kernel now is a testament to the fact that this feedback has been taken to heart, and Rust has seen improvements because of it.
> In a kernel context, even things like 'let' might fail
No, that's absolutely false, and breathless statements like these feel a bit disingenuous. Even `let s = String::new()` cannot fail, as all it does is move a stack pointer. I think perhaps you intend to mean that the expression on the rhs of a let statement can sometimes fail? Sure, and that's just like any other statement or expression. But, again, this is why we now have a bunch of "try_"-prefixed variants of common memory-allocating things that return an error instead of panicking.
> ... or you check for and try to catch these errors, which - well - is no different from C at that point
That's not even a little bit true. C has no built-in error checking mechanisms, or even a way to build safe, ergonomic error checking. If I call kmalloc() from C, I have to explicitly check for NULL. I can very easily forget to do so, and the compiler won't help me. If I call a similar "try_alloc()"-style function from Rust, it will return a Result, and the compiler will not let me do something with that allocated memory without explicitly handling a possible error.
> a better choice for a modern greenfield kernel would be one of the strictly functional languages: Haskell, OCaml, etc.
I suppose it depends on what your goals are. If you want to build the next Linux (or something more modest, but still quite popular), then probably not; you're not going to find enough people who are competent in or even interested in languages Haskell or OCaml to build a strong contributor base.
If you're instead doing research or are building something for niche use cases, then sure, that could work.
I respectfully disagree on the Haskell front. C is a significantly better known language then Rust, but you're advocating for Rust due to certain memory guarantees it provides. I think a similar argument can be made for languages like Haskell, and the formal mathematical guarantees they provide. Interestingly, Haskell was the language used to prototype seL4, which was then rewritten in C for performance, but the logic of the original Haskell implementation was used to formally verify parts of the later C one.[0] Imho, Rust is a (fantastic) attempt to make Algolians safer, but strictly functional languages like Haskell obviate many of the issues of Algolian languages in the first place.
On your last point, I'm unsure there's really much interest in making the next Linux, outside major corps who bristle at the GPL - e.g. Google's Zircon, notably written in C and C++ and first deployed in 2021. I think kernel dev largely divides into two camps: (i) hobbyist / academic kernels, which will be a homecoming parade of languages and designs (and rightly so); and (ii) production kernels, of which there are very few, written in C and C-likes, and conservative by design. Anything too new and unusual should probably prove its mettle in the former group before it graduates into the latter.
Along with the web browsers it's the most sophisticated software in the world. Battle tested, flexible, secure, powerful, polished, honed and revised for decades by the some of the worlds best developers.
Why replace it?
Linux for the most part is made up of a large amount of code written in C running in kernel mode. Its trusted computing base includes drivers, file systems and the network stack, which makes for a rather large attack surface. Operating systems running these components in user mode offer a different set of trade-offs between security/reliability and performance.
It's also a Unix-like kernel with a bunch of security features retrofitted in (SELinux, cgroups, namespaces...). It's fine if you want to run Unix-flavored software, but it is not a pure capability-based system like you can find on Fuchsia for example. Unix systems by design confer processes an intrinsic ambient authority (like access to the global filesystem or process table namespaces) and you have to explicitly isolate and confine stuff, whereas on capability-based systems you can't manipulate or even enumerate objects without a handle to something by design.
What I do wish is that people stop putting Unix and POSIX on a pedestal. These are 50 years old designs that keep accumulating cruft. They work, but that doesn't mean we should keep teaching computer engineering students Unix without criticizing its design at the same time, lest they think process forking is a good idea in the modern era.
Evidence?
[1] https://www.microsoft.com/en-us/research/uploads/prod/2019/0...
[2] https://fuchsia.dev/fuchsia-src/concepts/filesystems/dotdot
I have to say I hate CreateProcess more for taking a string rather than an array of string pointers to arguments like argv. This always made it extra difficult to escape special characters in arguments correctly.
Another example is ioctl() API for communicating with device drivers. It technically works, but marshaling huge APIs like V4L2 or DRM through a single kernel call is less than ideal: https://lwn.net/Articles/897202/
You can shove some of the minor cruft from Unix out to the side even on a Unix-like system, but you can't get rid of it all this way.
Polling mechanisms that keep track of sets of file descriptors in-kernel are especially useful when there's a large number of them to watch, because with poll() the kernel has to keep copying the sets from userspace at each invocation. Given that SerenityOS is focused on being a Unix-like workstation operating system rather than being a high-performance server operating system, there is usually not a lot of file descriptors to poll at once in that context. It's possible that poll() will adequately serve their needs for a long time.
That PR was an exercise of reducing unnecessary code bloat in the kernel. It wasn't a performance optimization.
[1] https://github.com/SerenityOS/serenity/commit/6836091a215229...
So the alternative is to rip it out. The benefit of that (in the real world) is unclear ...
– 1991.
Stop such a dismissive asshole towards people's projects they find interesting to work on.
Do you have any evidence to support that claim?