Live data from Hacker News

Operating System Development Series (2008)

brokenthorn.com

31–38 of 38 posts

Re: Operating System Development Series (2008)

#32
post #19

Earlier quoted context omitted.

If you want something different, research SPIN OS with Modula-3, Oberon with Oberon [1]. The work done by Xerox with Interlisp-D, Smalltalk and Mesa/Cedar [2] Or before Multics and UNIX were even born, the work done in Burroughs B5000. [3] There are plenty more examples, one just needs to dive into the history of computing. [0] - http://www-spin.cs.washington.edu/ [1] - http://www.projectoberon.com/ [2] - https://arc…

Absolutely, there's been various approaches researched in the past - and I've used Oberon before, really enjoyed it - I'm just curious as to why it doesn't seem to happen any more.

> I'm just curious as to why it doesn't seem to happen any more.

my _guess_ is that it is quite hard, and the payoff not so great, which would deter folks from venturing out too far. something similar to what happens in commercial space where a huge amount of energy is expended in enticing users to click advertisements etc.

Re: Operating System Development Series (2008)

#33
post #17
post #7

Earlier quoted context omitted.

In chapter 2 of the tutorial, he mentions Commodore DOS as being an OS which resides in ROM (read only memory), which means it's definitely possible. I'm just a laymen but I'd wager that there are some cases where this is still done.

But that's still just software stored in a ROM chip. I think what he meant was implementing the actual logic in silicon. Something like a hardwired CPU. I'm not aware of such a machine.

FPGA? ASIC? Sure it's possible, but really only done in highly specialized environments, like bitcoin mining.

Re: Operating System Development Series (2008)

#34

It seems that open-source operating system projects either never quite get past the point of having a kernel that can print stuff, read/write FAT32, and run a couple of userland processes, or they attempt to implement POSIX. There's a couple of attempts to build something different - Haiku, based on the design of BeOS; and Redox, written in Rust and implementing access to the filesystem as URLs - but where's all the…

Have you tried MenuetOS, for example? It does have a quite nice UI, TCP/IP support, etc

And without any attempt to be 'yet another UNIX clone', I think.

Re: Operating System Development Series (2008)

#35

It seems that open-source operating system projects either never quite get past the point of having a kernel that can print stuff, read/write FAT32, and run a couple of userland processes, or they attempt to implement POSIX. There's a couple of attempts to build something different - Haiku, based on the design of BeOS; and Redox, written in Rust and implementing access to the filesystem as URLs - but where's all the…

> where's all the actual OS research? Where's the service-oriented OS built on capabilities with a typed object store for a filesystem?

Once you realize there's not much a difference between Microkernels are the recent microservices architectures, they become interesting again. Then you might want to look in recent advances such as Unikernels or Anykernels.

Here's a good start summarizing lessons in Microkernels learned in the last decades: http://dl.acm.org/citation.cfm?id=2522720

Re: Operating System Development Series (2008)

#36

It seems that open-source operating system projects either never quite get past the point of having a kernel that can print stuff, read/write FAT32, and run a couple of userland processes, or they attempt to implement POSIX. There's a couple of attempts to build something different - Haiku, based on the design of BeOS; and Redox, written in Rust and implementing access to the filesystem as URLs - but where's all the…

Perhaps there's something I'm missing but for the last two on your list there's no reason to build a full on O/S. "A service" these days means "something that lives on a TCP or UDP port" and URL means HTTP or HTTPD.

I've built a couple or three microkernels[1] to use for real work, and it's just not interesting past a certain point. Once you get the equivalent of the Linux ucontext.h stuff done the rest is ... stamp collecting.

[1] one back in the dark ages on top of DOS to enable getting a project rolling in parallel with the hardware, another specifically for providing sandboxed services on top of an existing RTOS, mainly to pretend this was a different computer/virtual machine, again as leverage because of schedule.

These days, you would put up a hypervisor or just use a COTS virtual machine.

I keep hoping something will be done with BeOS but ...

Re: Operating System Development Series (2008)

#37

It seems that open-source operating system projects either never quite get past the point of having a kernel that can print stuff, read/write FAT32, and run a couple of userland processes, or they attempt to implement POSIX. There's a couple of attempts to build something different - Haiku, based on the design of BeOS; and Redox, written in Rust and implementing access to the filesystem as URLs - but where's all the…

Perhaps there's something I'm missing but for the last two on your list there's no reason to build a full on O/S. "A service" these days means "something that lives on a TCP or UDP port" and URL means HTTP or HTTPD. I've built a couple or three microkernels[1] to use for real work, and it's just not interesting past a certain point. Once you get the equivalent of the Linux ucontext.h stuff done the rest is ... stamp…

> there's no reason to build a full on O/S.

While there might be no reason to build a kernel - most modern ones will let you lock down a process well enough, although it "looks weird" - building good UX around capabilities and objects instead of permissions and files requires starting from the ground up. The vast majority of applications, tools, and workflows that people use right now don't fit within that paradigm.

> "A service" these days means "something that lives on a TCP or UDP port" and URL means HTTP or HTTPD.

A service consists of an administration protocol and a usage protocol. In Linux, the administration protocol is usually some ad-hoc text format and SIGHUP, in Windows it's Powershell, and the usage protocol is almost always ad-hoc over TCP, requiring a library to interact with it.

It's possible to abstract services away from how you communicate with them, provided that you're working within an environment where everyone buys into that abstraction. Communicating with a file on your desktop, a file on a file server, a database server, and your coworker's spreadsheet window all become something you can do without having to find the relevant library which speaks the right protocol, or have ad-hoc mechanisms for sharing each of these things over a network - the relevant services self-describe how to communicate with them, in the same way that you can connect Powershell to an Exchange server and have all the tools for managing Exchange without installing anything.

You get to do away with SSHing into another box with a completely different shell environment, or trying to wrangle your local tools to work over sshfs. You could work on drafting an important email with a coworker as easily as dragging the window into your chat application, with neither the chat application nor the email client having to care how that works - the chat application just needs to be able to transport capabilities, and the window manager needs to be able to create a "window view" capability.

You can also start playing with really fancy things like dynamic constraint-based load balancing across a network, once your services don't care about how they're communicating with each other or where they are - where services get farmed out onto the network automatically when you perform resource-intensive tasks.

Plan 9 gets some of the way there, although I believe a filesystem is not discoverable enough - can I reliably get a lightweight IDE to tell me what "echo swap > /dev/mouse" does, vs "mouse.swapButtons()" where mouse is a typed variable? There's also no formalized way of doing request/response (especially out-of-order), and accessing a certain field of a message requires ad-hoc string parsing which is easy to get wrong.

This needs to be done as an operating system - a complete set of tools which enables a certain way of managing and interacting with resources, both as a developer and a user - because otherwise you keep hitting on the boundary of things you can interact with within the system and things you need to interact with outside the system. If you can interact with your text editor and chat application but not your spreadsheet tool or database server this way, that diminishes its use significantly.

I've been playing with minimal systems which do some of this. It's interesting, but hard work to build entire new user experiences from scratch instead of being able to port a libc to a new kernel and get a bunch of stuff for free.

Re: Operating System Development Series (2008)

#38

Earlier quoted context omitted.

Perhaps there's something I'm missing but for the last two on your list there's no reason to build a full on O/S. "A service" these days means "something that lives on a TCP or UDP port" and URL means HTTP or HTTPD. I've built a couple or three microkernels[1] to use for real work, and it's just not interesting past a certain point. Once you get the equivalent of the Linux ucontext.h stuff done the rest is ... stamp…

> there's no reason to build a full on O/S. While there might be no reason to build a kernel - most modern ones will let you lock down a process well enough, although it "looks weird" - building good UX around capabilities and objects instead of permissions and files requires starting from the ground up. The vast majority of applications, tools, and workflows that people use right now don't fit within that paradigm.…

This all looks awfully familiar, even though I'm primarily in the embedded space.

>In Linux, the administration protocol is usually some ad-hoc text format and SIGHUP, in Windows it's Powershell,

It's the same everywhere if you're liberal about the word "text".

> can I reliably get a lightweight IDE to tell me what "echo swap > /dev/mouse" does, vs "mouse.swapButtons()" where mouse is a typed variable?

So one of those is doubtless a lower primitive than the other; exchanging mappings is just that. An "IDE" just exposes the mappings in some human readable form.

If the mapping is 'C' source, that's one way. If its 'C' source that calls ioctl() it's another...

Have you ever looked at SNMP? With its ASN.1 MIBS? The metadata for the name space is specified there. Now, the BER encoded UDP PDUs are anything but ASCII but that's just a tools problem, again. Using those MIBs you can basically treat a client on the requester as a shell using ASCII names.

It's a bit like JSON the hard way. You can do more sophisticated things but that's just molecules made of atoms.

> This needs to be done as an operating system - a complete set of tools which ...

It's just a stack of shells. So meta the shells and Bob's yer oyster. It's not that simple yet it sort of is...

For a variety of reasons, I think of these as seperate appliances.

> ... hard work to build entire new user experiences from ...

Yup.

Post reply on HN