704 comments

[ 2.8 ms ] story [ 365 ms ] thread
Google clearly has a LOT of cash to play with. They could have refactored/re-used the permissively licensed BSD core, but ended up re-inventing the wheel, breaking a TON of POSIX based software.

For what benefit exactly?

Complete and total lock-in?
That must be why the code is on GitHub.
So is Linux' code, except if you try to redistribute it by linking to it, you'd have to disclose your mods. Not so with Fuchsia's license. They can push out proprietary code all they want.
They certainly picked the correct license to do just that. GenodeOS has exactly what they needed on a formally proven kernel. Why didn't they use that? NIH syndrome... that's why. And of course, control.
Promotions at Google are based on quality of implementation, not original ideas.
The history of chat products out of google shows that it's about quantity, not quality.
Yup, I'm wondering how many more days Allo has to live. I don't even bother with the proprietary Google messenger apps anymore because I know they'll be killed within a couple years or less.
I'm sure people said that about Bell Labs and Unix too.
I read in an older article that POSIX software compatibility may infringe on Oracle's copyrights. Maybe that's why?
Making a piece of software that follows the POSIX standard, a term that Richard Stallman came up with, runs afoul of copyright?

That would seem like a massive slap in the face to the cause of freedom, if so.

It would be ironic. But RMS only proposed the name, not the standard itself.
There's nothing implying that Google wants to make a POSIX compliant OS. Why do you think that's important for a Fuchsia type project?

The other huge Google OS (Android) doesn't benefit from POSIX either at all - the POSIX interface isn't even exposed to the user applications.

Well, not the full POSIX interface. Bionic does expose a significant portion, though.
It is not part of the official NDK APIs, use it at your own peril, regarding NDK lockdown.

ANSI C and POSIX do overlap, but aren't the same thing.

In NDK yes. Those aren't really as fully compliant as we'd wished (and differences in implementation are sometimes really annoying to deal with).

Nevertheless, vast majority of applications will never include NDK code and even if they will, they probably won't really talk to POSIX calls directly either. For the type of OS Android is, it doesn't really gain anything by being POSIX compliant far away from developer APIs. And Fuchsia, if anything, is trying to be an Android type OS.

Well - requiring basic frameworks to be re-written for your vanity-OS is the fastest path to irrelevance. Most libraries and frameworks (from curl to zlib/git) assume a POSIX interface. If Fuchsia doesn't care about these fundamental utilities being functional, then that's a flawed assumption regarding the developer ecosystem
Assuming Google is even targeting the developer ecosystem here. I'd assume that most of the users of Fuchsia will be end users, so that's what Google is targeting.
Without apps (written by developers), there will be no users. Google's customers for Fuchsia are only developers, to start with.
App are to be written in Dart, which doesn't care at all about POSIX.
How much of the Android app ecosystem has a strong dependence on POSIX compatibility? I mean, yes, it is Linux under the hood, though it's not glibc, but most software is written against the SDK which abstracts over all of that.

Not being POSIX doesn't mean it's going to be entirely foreign or that it will have no compatibility with software that is already written for POSIX-like platforms. It just means that the basic process management, IPC mechanisms, permissions handling, and so on uses a model which is akin to a cleaned-up subset of POSIX; everything is done via handles, which are a lot like file descriptors but work in a somewhat more uniform way, there is cleaned up management of resource allocations to jobs, memory mapping of processes, and thread management, and so on.

It's not terribly hard to build a POSIX-like layer on top of this; said layer isn't necessarily going to support some of the real warts of POSIX, like the really broken way signals work in POSIX, so some software that intimately depends on this may have to be factored out to support the way that Fuscia handles signals, but for most software this will be a big improvement. Software on POSIX systems nowadays has to jump through hoops to make signals play well with event loops, frequently allocating a pipe that gets written to in a signal handler, so the event loop can pick up that notification later, while in Fuscia that's how signals already work, it's just a state change on a handle that can be waited for in Fuscia's equivalent of select/poll. So in cases like this, Fuscia will add a new code path that is simpler and more maintainable than the one on POSIX-like systems.

Most people aren't running curl on the command line of their phone, and developers use java apis to make http calls. The convention is that the os, i.e. the company, provide the basic frameworks, which is exactly how iOS and android work. The POSIX ship has sailed, you write portable C or in a managed runtime, people rarely write to POSIX.
Considering that this is a microkernel, you can reimplement a "small" POSIX compatible interface that POSIX-aware applications may use it.

How small this POSIX interface can be depends on how much of POSIX legacy you want to reimplement.

The core of zlib shouldn't have any POSIX dependence; it just takes buffers of bytes and produces buffers of bytes.

It has some convenience functions for decoding files given a path or FD, but I'm sure Fuscia's limited POSIX compatibility layer will support that, basic file access is relatively easy to provide in a POSIX library wrapping Fuscia's file handling.

Likewise, I'd be willing to bet that curl and Git would mostly work on top of the limited POSIX compatibility layer; they might need a few tweaks, but likely not much more than the tweaks needed in porting to the various BSDs and OS X, and likely a lot less than is needed to provide them natively on Windows.

I just checked out their third_party/curl repository, and here is the full diffstat from the upstream they based it on:

  $ git diff --stat origin/upstream/master origin/master
   BUILD.gn                         |  438 ++
   include/curl/curlbuild.h.fuchsia |  198 +
   lib/curl_config.h.fuchsia        | 1034 +++++
   src/.gitignore                   |    1 -
   src/tool_hugehelp.c              | 9000 ++++++++++++++++++++++++++++++++++++++
   5 files changed, 10670 insertions(+), 1 deletion(-)
This adds a build file for the build system they use, and a couple of the config files that would normally be generated by the configure script but presumably the configure script doesn't support Fuchsia, along with an auto-generated source file containing the help output.

So it looks like they have had to make zero actual source changes to cURL; the POSIX compatibility layer and setting the appropriate defines in cURL's config files are sufficient.

For the benefit of one or a few individuals "burning through a lot of cash", "spearheading the effort", and "padding their resume(s)".
I don't know why they down-voted you. The pitch, if any, for fuchia, wouldn't stand muster outside Google. Clearly, some folks benefit from "burning through a lot of cash", "spearheading the effort", and "padding their resume(s)"
Why not? Many are tired of Linux's constant convention thrashing. I would love to reimagine Linux minus all its ancient, historical cruft.

Yes there's BSD, but it is nice to have another take.

I don't know if you see the irony in your arguments. You demonize capitalism in another comment to me, and argue here that another take that requires a LOT of funding is a "nice to have".

Do you realize that this "nice to have" is made possible by the deep coffers of Google, whose existence is owed to capitalism?

Non sequitur. Capitalism is not the only (possible/existing) deep-coffer generator. See China.
Yeah I'm not really agreeing with ya there.

Whether its put together by Google, or the community, or whoever, really doesn't matter. Yes in this case it's Google, who does exist due to capitalism (not exclusively due to capitalism, though, as other systems work in other countries), but then capitalism is not the only economic or political system that produces 'deep coffers'. And this 'nice to have' is not build-able exclusively by Google.

By your logic anyone born to a family where the parents have U.S. employment would owe their existence to capitalism. Does that instinctively seem correct?

??? The whole point of this OS are concepts like capabilities that aren't represented in POSIX interfaces.
Umm, with android apps being written in java, I don't think most developers or users worry about POSIX, and Linux isn't fully posix anyway.
> with android apps being written in java

Many Android apps drop down to the NDK, where POSIX does matter.

> Linux isn't fully posix anyway

It's close enough that the difference really is just an issue of not getting certification.

Not to mention other higher level languages that have an abstract for io. (libuv in node and elsewhere for example)
Better security model when number of users per system is less than unity.
The "wheel" is 40 years old. It's a great wheel, it's doing a hell of a job. But with 40 years of perspective, maybe it actually can be re-invented better without carrying around a pile of legacy back-compatibility needs.
> The "wheel" is 40 years old. It's a great wheel, it's doing a hell of a job. But with 40 years of perspective, maybe it actually can be re-invented better without carrying around a pile of legacy back-compatibility needs.

Newer is rarely better. Besides, in computing, so many "new" things are just rehashes of old (and not so old) ideas.

I really wish we could get away from the "that software is old" meme in this industry.

One great advantage of old software that has been continuously developed by the same core of people is that when new features are added, they have the benefit of being informed by all the past failures and near-misses. And they are almost always features that are actually new.

New software, otoh, hasn't been through a 40-year shakedown cruise.

Old software often had requirements or made design decisions based on assumptions that aren't true anymore. These can make it more difficult to deal with or extend. I agree that in general we should just use the old software that works. However big projects like fuscia can reap some long term benefits. In the end it's a cost/benefit analysis to decide.
Well, the context that shaped old software has a habit of re-appearing, so the design decisions/trades-off may have become relevant again at least once since. The first vectorized code I saw was a relic from a long-gone Cray 1.
What? New software is usually better, or do you think people never improve anything? That just makes no sense.
Of course software improves. The context was BSD, Posix, etc are based on 40 year old tech. Those systems got a lot right and it takes a hell of a lot of hubris to think just because it’s 40 years old it is somehow not good anymore.
If it's so terrible why did microsoft develop the windows subsystem for linux? Shouldn't they instead try to avoid the "pile of legacy" as much as possible?
Well they didn't replace their NT kernel with WSL? So it's a bit of apples-to-oranges comparison. WSL is there to provide access to the existing, vast library of linux software that might not have been treated with win32 ports?
1. MS is all about "piles of legacy." That is not counter to their philosophy at all. 2. MS apparently sees some long-term advantage to having a Linux compatibility layer. (By "advantage," I mean of course some way to make more money.)

Neither of these things has any bearing on the quality of Linux, or lack thereof.

How did you manage to read "it's terrible" into "it's a great wheel"?
Because developers who write software that is deployed to non-Microsoft cloud providers are writing code that runs on Linux, and WSL makes that a lot easier to do on Windows.
Because they saw a market opening with UNIX devs no longer happy with the hardware selection for using macOS as a pretty UNIX.

Also their goal is not to run 100% of POSIX or Linux specific software, rather achieve a good enough compatibility to run majority of well known projects and utilities.

WSL is an attempt at getting developers to use Windows rather than OS X or Linux. That's a very different situation than coming up with the fundamentals for a new operating system.
(comment deleted)
Do you think it will ever replace Linux on something that isn't a phone?
Considering that they could plausibly have it shipping on tens of millions of devices as soon as they get a browser working and hardware support for a well controlled subset of modern systems, I think that's a real possibility.
There are two wheels involved, the micro-kernel and capabilities, though they are roughly 40 years old.
Google invest heavily in securing computing generally, from creating the secure browser Chrome because the alternatives at the time were very insecure to a big paid team of security researchers (recent successes include discovering Spectre and Meltdown) to creating secure operating systems to possibly eventually replace Android and ChromeOS.

A lot of security-interested programmers think it easier to secure a small microkernel like Fuchsia than to secure the older generation of operating systems and the baggage they have acquired.

Google want everyone to trust the Internet. If consumers are scared to shop online, Google dies. This is why they put so much effort into securing it.

> For what benefit exactly?

Wouldn't surprise me if the unofficial reason is because it's more fun.

Personally, i'll be happy if we can move past read/write constructs designed for tape drives.
Networks are the new tapes — still slow and sequential.
Why would it break a ton of posix software? They seem to have ported the musl c library, they removed to have stuff like cmake vim git openssh running on it
To people which don't understand the overall decision to create another system, I'll talk about at least one benefit to create a system that is not Linux: make software more simple and efficient. Do you really think that Linux is so great? Linux is a bloat system [1], POSIX is not so great as well (do you really read the WHOLE POSIX spec?).

It's important standards, it's important sometimes (SOMETIMES) compatibility. But not all this stuff defined in POSIX it's important. POSIX sucks sometimes [2], only GNU can be worse about being bloated [3].

Only users which don't touch in code can think that Linux, POSIX and GNU are entities following principles based in simplicity. Linux following Unix guidelines? This only can be a joke of Linus.

Creating custom software, maintaining and other stuff on things THAT YOU DON'T UNDERSTAND has a massive cost. As well, the cost to understand complex things, it's even worse.

Sometimes it's even more simple re-inventing the wheel than understand why a wheel was build with a fractal design [4].

[1] Linux LOC overtime https://www.linuxcounter.net/statistics/kernel

[2] POSIX has become outdated http://www.cs.columbia.edu/~vatlidak/resources/POSIXmagazine...

[3] Code inflation about /usr/bin/true https://pdfs.semanticscholar.org/a417/055105f9b3486c2ae7aec2...

[4] The Linux Programming Interface https://doc.lagout.org/programmation/unix/The%20Linux%20Prog... (that cover of book has a reason and yes: it is what you think)

> ... POSIX is not so great as well ...

Ugh, tell me about it. Just dealing with a relatively simple situation where you've got signals coming in while reading a pipe is a hassle to get completely correct.

I am so there for an operating system API that is relatively simple and sane. Where writing correct programs is, if not the easy path, at least not the hard and obscure path.

Interestingly PowerShell is petty awesome in that regard. You pass around objects instead of trying to parse strings and things.
(comment deleted)
(comment deleted)
PowerShell is not Windows API, win32 is. So your comment makes little sense.
Powershell is just that, a shell. I agree that Powershell itself is pleasant enough to use but that's not what's being discussed.
> You pass around objects instead of trying to parse strings and things.

That can't be very good for debuggability.

Type checking and calling help methods can be useful for debuggability! If you want to figure out what you're looking at in string format, call its .ToString method.
Adding extra complexity just means more to go wrong. Plain text can't really go wrong because anything can use it, anything can edit it, anything can show it. With "objects" I'm betting that Powershell itself never fails.
(comment deleted)
I'd be down for an Erlang-like OS ABI (or, to put that another way, a Windows-GUI OS ABI, but for even non-GUI processes): just message-passing IPC all the way down. OS signals, disk IO, network packets, [capabilities on] allocated memory, [ACL'ed] file handles, etc: all just (possibly zero-copy) messages sitting in your process's inbox.

Of course, it's pretty hard to deal with a setup like that from plain C + libc + libpthread code, so OSes shy away from it. But if your OS also has OS-global sandboxed task-thread pools (like macOS's libdispatch)—and people are willing to use languages slightly higher-level than C where tasks built on those thread-pools are exposed as primitives—then it's not out of the question to write rather low-level code (i.e. code without any intermediating virtual-machine abstraction) that interacts with such a system.

> ... message-passing IPC all the way down

Wasn't QNX like that?

QNX IPC mechanism is essentially cross-process function call, ie. message sender is always blocked while waiting for message reply and the server process cannot meaningfully combine waiting for message and some other event.

Edit: in essence QNX messages work like syscalls, with the difference that there are multiple "systems" that accept "syscalls". For what it's worth Solaris has quite similar IPC mechanism that is mostly unused.

The NT Native API is relatively elegant, especially Alpc (a shame that it's mostly hidden by Win32 tho)
The biggest blunder is that ALPC is not accessible through Win32 at all. ALPC is much more sane than any other IPC Windows got.

Sure, you can use ALPC, but only by using undocumented unstable NT API...

Sigh.

Don't worry, by the time it is complete and mature, it will be complex and full of quirks too.

I'm not convinced that even Google has the resources to build something like that successfully. Except perhaps if they target a very specific use case.

What do you make of, for instance, OS X or VxWorks?
OSX is based on Darwin, which is a Unix (BSD-like) operating system.

I'm certain you can find complexities and bloat in there too, if you look.

Of course. And they don't even pretend that's untrue. Every few releases they focus on lowering bloat.
I'm referencing the abilities of F500 companies to sustain OS development. OS X has roots in mach, and some BSD, but to call it either one is trivializing the amount of work that has gone on.
Oh hell yeah

OS X has tons of weird quirks and compatibility mindfucks going back to their transition from OS 9 (all those .DS_Store and _filename files for "resource forks")

Backwards compatibility is #1 reason for increasing complexity. Apple is sometimes good in cutting away compatibility for the sake of cleaning up, but there are still weird issues poking now and then

hell the whole NSEverything is a compatibility thing with NextStep, which is long dead.

Apple doesn't really appeat to care about backward compatibility though. They break lots of things with every release of the OS. I would give that excuse to Microsoft, but not Apple.
True. But the legacy code is still there.

Which is the worst of both worlds.

Doesn't work, isn't maintained, but remains as an attack vector and failure mode.
Disagree. Microsoft keep making new APIs and depricating old ones. With Mac you got cocoa which goes back to 1989 and you can still use.

It might not be backwards compatible but from a developers perspective it is nice to be able to reuse old knowledge.

I think Apple has been much better than MS or Linux in continously modernizing and upgrading what they have. On windows and linux things tend to become dead ends as new flashy APIs appear.

Sure old win32 and motif apps might still run but nobody really develops using these APIs anymore.

On windows I first use win32, then MFC, then it was WinForms. Then all of that got depricated and we got WPF, silverlight and then I sort of lost track of what was going on. Meanwhile on Linux people used tcl/tk for GUIs early on. And there was motif, wxeindows. KDE and Gnome went through several full rewrites.

If we look at MacOS X as the modern version of NeXTSTEP the core technology has been remarkable stable.

Sure they have broken compatibility plenty of times but the principles and API are at their core the same.

Quickdraw VR, Quickdraw 3D, NetTalk, JavaBridge, Carbon, Objective-C GC, RubyCocoa, WebObjects, ....

One just needs to look into the right spot.

I concur, macOS is a nightmare. I didn't think so before I had to write code for it, but I am currently writing code that runs on 5 OSs (Linux, Windows, macOS, Android and iOS) and macOS is by far the worst of all. In particular, everything related to filesystems was a nightmare, especially HFS+. Thankfully Apple is replacing it with the much more sane APFS.

I don't have much experience with them but I think VxWorks and QNX are good examples of simpler OSs. I do have some experience with Minix3 and it is certainly one. I guess the BSDs stand somewhere in the middle.

QNX always had practically oriented limitations of the general microkernel idea (eg. QNX native IPC/RPC is always synchronous) which allowed it to be essentially the only reasonably performant true micro kernel OS in the 90's. Unfortunately it seems that after QNX got repeatably bought by various entities the OS got various weird compatibility-with-who-knows-what hacks.
AFAIK OSX is built on mostly pre-existing components like Mach and FreeBSD. I know nothing about VxWorks.
I don't quite see where you're trying to go with these. Are they supposed to be examples of POSIX systems or something else?
Google already has a track record of building half an OS in android and its a pretty mediocre one with some redeeming qualities.
The fuchsia part of android is linux? Anyway Google has a lot of people working for it. I don't think anyone would have expected NT to come from Microsoft at the time that it did.
Is this the same OS that smokes an iPhone X with an A11? Not bad for "half an OS".

https://www.youtube.com/watch?v=B65ND8vUaKc

You posted a video wherein the tester simply sequentially opens and closes a series of apps on a Samsung and Apple device seeing which will run through the sequence faster...and the Samsung was a bit slower.

In theory it makes me wonder if iphone's storage is slightly faster than the latest galaxy or if the process by which one loads an iphone app is slightly faster/more efficient than the one by which an android app is loaded or if the tiny selection of apps the reviewer picked are just better optimized for iphone. Nobody smoked anyone and nothing of note was learned by anyone. So much so that I wonder why you bothered to watch said link or paste it here.

I said half an OS because its built on technologies like linux and java not because its half assed even though it is.

>You posted a video wherein the tester simply sequentially opens and closes a series of apps on a Samsung and Apple device seeing which will run through the sequence faster...and the Samsung was a bit slower.

Certain apps were slower to load on the Samsung device. Additionally, the Samsung device encoded the 4K siginificantly video faster and took round 1 by 14 seconds and round 2 by 16 seconds.

>In theory it makes me wonder if iphone's storage is slightly faster than the latest galaxy or if the process by which one loads an iphone app is slightly faster/more efficient than the one by which an android app is loaded or if the tiny selection of apps the reviewer picked are just better optimized for iphone. Nobody smoked anyone and nothing of note was learned by anyone. So much so that I wonder why you bothered to watch said link or paste it here.

The iPhone X has faster storage and a significantly faster SoC. A 30 second win by the Samsung phone is what I could call getting smoked.

>I said half an OS because its built on technologies like linux and java not because its half assed even though it is.

And iOS is was a decedent of MacOS which itself is a decedent of NeXTSTEP. It also uses a language 11 years older than Java. So it sounds like iOS also meets your criteria of being "half assed".

OS X is literally the next version of NeXTStep and, as others have pointed out, was built on other OS technologies.
And NeXTStep itself is to large extent one big ugly hack that stems from experience of trying to build Unix on top of Mach. In fact it is not microkernel, but monolithic kernel running as one big Mach task, thus simply replacing user/kernel split with task/priviledged-task split (which to large extent is also true for OS X).
>Unix on top of Mach

Didn't Mach start out as a replacement kernel for BSD? Building a Unix on top of Mach is like building a truck over truck chassis.

It did not. Mach is traditional microkernel which provides IPC mechanism, process isolation and (somewhat controversially) memory mapping primitives and not much else.

In late 80's/early 90's there were various projects that attemted to build unix on top of that as true micro kernel architecture with separate servers for each system service. Performance of such design was horrible and there are two things that resulted from that that are still somewhat relevant: running whole BSD/SysV kernel as Mach task, which today means OS X and Tru64 (at the time both systems had same origin as both are implementations of OSF Unix) and just ignoring the problem which is approach taken by GNU/Hurd.

>slowness

Worth noting that's because Mach IPC is extremely slow, an order of magnitude slower than L4 family.

Correct. The Mach research project at Carnegie Mellon aimed to build a replacement kernel for BSD that supported distributed and parallel computing.

Next's VP of Software Engineering, Avie Tevanian, was one of the Mach project leads. Richard Rashid, who lead the Mach project ended up running Microsoft Research's worldwide operations.

Their work on a virtual memory subsystem got rolled back into BSD.

https://en.wikipedia.org/wiki/Mach_(kernel)

The Computer History Museum has an interesting long form interview with Avie:

Part 1: https://www.youtube.com/watch?v=vwCdKU9uYnE Part 2: https://www.youtube.com/watch?v=NtpIFrOGTHk

"not convinced that even Google"

Google CAN'T do something small, simple and elegant, partly for the very reason that they're too big.

Google also can't be convinced to carry a project through to completion and release /salty.
Google is very good in marketing. For example go.
Go has been a success as well because of that marketing machine.
Why do people say this? What marketing has Google ever done for Go?
Making it the first Google result for "go"? (Instead of the verb, or the game)
When I search "go" on google the first result I get is a package courier, then the game, then the verb... then comes Golang though.
Its branding and companies using the language with hopes of being acquired by them is already good enough.

Had Go been released at AT&T and it would have shared the same fate as Limbo.

> companies using the language with hopes of being acquired by them

This is beyond belief. What companies are using Go with the hopes of being acquired by Google? Does anyone honestly believe that Google's acquisitions teams know or care about programming languages? Any business that acquires companies on that basis is doomed to failure, as is any company that hopes to be acquired on that basis.

Well if one doesn't like something, they have to come up with part hilarious and part wild assertions like this.
Sponsoring Go introduction workshops for university undergrads, complete with Google-swag prizes and actual Google employees flown in from another country.

So, quite a lot if that experience is anything to go by.

The idea here is if it worked its marketing but if it doesn't its market that has spoken.
I will say that my professor Axel Schreiner at RIT offered one of the two first Golang classes at a collegiate level back in... 2009? and he reached out to Google and said, "send us some Android phones so that we can develop Go on ARM"

They obliged with a full crate of first generation Motorola phones, each one preloaded with a 30 day free Verizon plan. Every person who took that class got one, and surely all of them made it back into the school's hands at the end of the quarter.

(I'm not sure how many people actually ever compiled and executed any go binaries on arm that year; we all learned Go, and it was a great class! But as far as the class, the phones were completely unnecessary. I think that they did make a more relevant class where the phones were able to be used again the year after that.)

Counterpoint: the Go programming language.
Which failed in its stated mission and fell back to being yet another just-ok web scripting language.
30 years is a good time frame to judge a programming language.
Java also has been a phenomenal success, just not as a language for applets.
Um...what? Are you thinking of Dart?
Go initially billed itself as a language for systems programming, but that claim was quickly retracted when it turned out that Go's creators had a different notion of systems programming than everyone else.
Not everyone. Just self-proclaimed authority who decided systems means operating system or some embedded code. Lots of companies I worked have title Systems Engineer or departments Systems engineering which has nothing to do with Operating systems but just some internal applications.
> Just self-proclaimed authority who decided systems means operating system or some embedded code

Systems does mean that. There are 2 broad categories of software you can write. One is software that provides a service to the user directly. That is an application. The other kind is software that provides a service to applications. That's systems software. Do you think there's something wrong with this notion? It's pretty well accepted over the decades:

http://en.wikipedia.org/wiki/System_programming

Sure, and Go's most prolific users are in infrastructure software for distributed systems. You seem to agree with the quoted statement.
Well by that definition Docker, Kubernetes, etcd and so on are systems software. But people here somehow explicitly make it to mean Computer Operating Systems.
By this definition, Python and JavaScript are systems languages.
This was all over with way before the 1.0 release even happened. There's no point in arguing over something that was addressed several years ago before Go even reached stability. Plus, trying to say that Go was a "failure" because of this is absurd. It was an issue of terminology, not technology. Given Kubernetes, Docker, etc you would have to be totally delusional to claim that Go has been a failure.
Did Go start as an official Google project? It always seemed like more of a side project that happened to be developed by Google engineers.
It has always been associated with Google for as long as it has been known outside of Google. :)
I recognize that Linux and especially GNU are bloated. However the Linux LOC overtime chart is useless at demonstrating it. AFAIK size increase of Linux is mainly caused by drivers. Device support is overall the most important thing OS offers. And it's hard to be small and elegant while supporting everything under the sun, which Linux can't even really achieve. One could say something about epoll instead of kqueue, ALSA instead of OSS or other similar cases. But the size itself doesn't say much.

I agree that there is much to be explored yet in OS design. However it needs deep pockets to actually support wide array of hardware. Or a long time.

I cheer for Toybox and Oil shell regarding the GNU userland.

When I see all the openat(2) and friends family of functions or chmod/fchmod, chdir/fchdir, barbaz/fbarbaz I'm thinking that it all needs a bit of a clean up. Some batching system call would be appreciated as after Meltdown syscalls are more expensive.

I personally like and keep my fingers crossed for DragonflyBSD. They are doing things that are innovative while keeping conservative core for the lack of better words. But at the same time DragonflyBSD has minuscule hardware support comparing to Linux.

I don't think changing the usage of system calls in the kernel as a reaction to Meltdown is a good workaround to make. This could lead to CPU makers relying on the workaround rather than fixing the issue in their CPU architecture. The other side of the medal is that this increases the motivation to switch to a newer CPU, which generates more waste, and the fact that CPUs running slower need to run longer, and use more energy, both of which is bad for the environment, and costs money.
Fuchsia is a microkernel architecture, so I think it being "more efficient" generally is not going to be the case. I do think it is valuable to see a microkernel architecture with large scale backing, as it simplifies security and isolation of subprocesses.
Or may be better at splitting up work across cores. Less lock/cache contention, better logical separation, etc.
No, it won’t. This is not the user land you’re talking about and in general the idea that multiple, isolated processes can do better on the same CPU, versus a monolithic process that does shared memory concurrency is ... a myth ;-)
For throughput, separate processes on separate cores with loose synchronisation will do better than a monolith. You don't want to share memory, you want to hand it off to different stages of work.

Consider showing a webpage. You have a network stack, a graphics driver, and the threads of the actual browser process itself. It's substantially easier to about bottlenecking through one or more locks (for, say an open file table, or path lookup, etc) when the parts of the pipeline are more separated than a monolithic kernel.

“Handing off” via sharing memory is much more efficient than copying.

Lock-free concurrency is also achievable.

Again, this isn’t the user land we’re talking about, in the sense that the kernel is expected to be highly optimized.

Granted, a multi process architecture does have virtues, like stability and security. But performance is not one of them.

Handing off means to stop using it and letting someone else use it. Only copy in rare cases.

Lock free concurrency is typically via spinning and retrying, suboptimal when you have real contention. It's better not to contend.

Kernel code isn't magic, its performance is dominated by cache just like user space.

High performance applications get the kernel out of the way because it slows things down.

> Lock free concurrency is typically via spinning and retrying, suboptimal when you have real contention.

Lock free concurrency is typically done by distributing the contention between multiple memory locations / actors, being wait free for the happy path at least. The simple compare-and-set schemes have limited utility.

Also actual lock implementations at the very least start by spinning and retrying, falling back to a scheme where the threads get put to sleep after a number of failed retries. More advanced schemes that do "optimistic locking" are available, for the cases in which you have no contention, but those have decreased performance in contention scenarios.

> Handing off means to stop using it and letting someone else use it. Only copy in rare cases.

You can't just let "someone else use it", because blocks of memory are usually managed by a single process. Transferring control of a block of memory to another process is a recipe for disaster.

Of course there are copy on write schemes, but note that they are managed by the kernel and they don't work in the presence of garbage collectors or more complicated memory pools, in essence the problem being that if you're not in charge of a memory location for its entire lifetime, then you can't optimize the access to it.

In other words, if you want to share data between processes, you have to stream it. And if those processes have to cooperate, then data has to be streamed via pipes.

> High performance applications get the kernel out of the way because it slows things down.

Not because the kernel itself is slow, but because system calls are. System calls are expensive because they lead to context switches, thrashing caches and introducing latency due to blocking on I/O. So the performance of the kernel has nothing to do with it.

You know what else introduces unnecessary context switches? Having multiple processes running in parallel, because in the context of a single process making use of multiple threads you can introduce scheduling schemes (aka cooperative multi-threading) that are optimal for your process.

System calls are not the reason the kernel is bypassed. The cost of the system calls is fixable. For example it is possible to batch them together into a single system call at the end of the event loop iteration or even share a ring buffer with the kernel and talk to the kernel the same way high performance apps talks to the nic. But the problem is that the kernel itself doesn't have high performance architecture, subsystems, drivers, io stacks, etc., so you can't get far using it and there is no point investing time into it. And it is this way, because monolithic kernel doesn't push developers into designing architecture and subsystems that talk to each other purely asynchronously with batching, instead crappy shared memory designs are adopted as they feel easier to monolithic developers, while in fact being both harder and slower to everyone.
"better" meaning what exactly? Are you talking about running a database with high throughput, recording audio with low latency, or computing pi?
And even on the latency side, you just want the kernel out of the damn way.
Given the topic we’re discussing, I don’t know what you’re talking about.
"More efficient" in terms of running LINPACK, maybe not. But the raw throughput of highly numeric scientific calculations isn't the goal of all architectures, even though we pretend it is.

It's possible to be more efficient at showing a bit of text and graphics which is what mobile phones do a lot more of than raw number crunching, except for games, except for games of course.

The reason a microkernel wouldn't be more efficient is that the OS is irrelevant for the (rather useless) LINPACK benchmark. However, I want a microkernel system and capabilities for HPC. The microkernel-ish system I used in the '80s for physics was pretty fast.
LINPACK would probably run equivalently. Anything that just needs the CPU will work about the same. It's overhead like networking/disk/display where microkernels lose out. Not saying that's overall a reason not to use, as the tradeoffs in terms of isolation/simplicity/security are an area very much worth investigating.
For networking and disk io monolithic kernel has to be pretty much completely bypassed already if you want high performance, see netmap/vale architecture for example.

Not sure about display though, but don't expect monolithic kernel to help here somehow either.

A microkernel gives programs less direct access to hardware.
Userspace implementations of various protocols usually suffer from various problems, most notoriously that applications can't share an interface (how would you if both try to write ethernet frames at the same time?) and lackluster performance in low-throughput scenarios (high throughput != low latency and high packet throughput != high bandwidth througput)

GPUs don't have much security at all, there is lots of DMA or mapped memory. Though on most modern monolithic kernels a lot of this work is either in modules (AMDGPU on Linux is usually a module not compiled into the kernel) or even userspace (AMDGPU-Pro in this case). Mesa probably also counts.

Microkernels aren't the ideal kernel design. Monolithic isn't either. I put most of my bets on either Modular Kernels if CPUs can get more granual security (MILL CPU looks promising) or Hybrid Kernels like NT where some stuff runs in Ring 0 where it's beneficial and the res in userspace.

> that applications can't share an interface

Of course they can share an interface, I even pointed out the vale switch as an example of this [1]. And it is very fast.

The thing is isolation and granularity that microkernels happen to have force certain design and implementation choices that benefit both performance and security on modern systems. And monolithic kernels while theoretically can be as fast and as secure actually discourage good designs.

[1] http://www.openvswitch.org/support/ovscon2014/18/1630-ovs-ri...

It doesn't look like netmap is actual raw access to the interface like I mentioned.

I also severely doubt that microkernels encourage efficient design. I'll give you secure but it's not inherent to microkernels either (NT is a microkernel, somewhat, and has had lots of vuln's over the years, the difference between microkernels and monolithic or hybrids like NT is that most microkernels don't have enough exposure to even get a sensible comparison going)

IMO microkernels encourage inefficient designs as everything becomes IPC and all device drivers need to switch ring when they need to do something sensitive (like writing to an IO Port unless the kernel punches holes into ring 0 that definitely don't encourage security).

Monolithic kernels don't necessarily encourage security but definitely efficiency/performance. A kernel like Linux doesn't have to switch priv ring to do DMA to the harddisk and it can perform tasks entirely in one privilege level (esp. with Meltdown, switching ring is a performance sensitive operation unless you punch holes into security).

I don't think monolithic kernels encourage bad design. I think they are what people intuitively do when they write a kernel. Most of them then converge into hybrid or modular designs which offer the advantages of microkernels without the drawbacks.

You are assuming that switching priv ring is a bottleneck, which it isn't. The cost of the switch is constant and is easily amortizable, no matter the amount of stuff you have to process.
The cost of a switch is non-zero. For IPC you need to switch out the process running in the CPU, for Syscalls to drivers a microkernel will have to switch into priv ring, then out, wait for the driver, then back in and back out, as it switches context.

A monolithic, hybrid or modular kernel can significantly reduce this overhead while still being able to employ the same methods to amortize the cost that exists.

A microkernel is by nature incapable of being more efficient than a monolithic kernel. That is true as long as switching processes or going into priv has a non-zero cost.

The easy escape hatch is to allow a microkernel to run processes in priv ring and in the kernel address so the kernel doesn't have to switch out any page tables or switch privs any more than necessary while retaining the ability to somewhat control and isolate the module (with some PT trickery you can prevent the module from corrupting memory due to bugs or malware)

macOS (and iOS, tvOS, watchOS, etcOS) are built on a microkernel too (Mach).

It's not an automatic security win.

You are mixing things up a little bit. Darwin (the underlying kernel layer of MacOS X and the rest) is actually a hybrid between a microkernel and a regular kernel. There is a microkernel there, but much of the services layered on top of it are done as a single kernel. All of that operating within one memory space. So some of the benifits from a pure microkenel are lost, but a whole lot of speed is gained.

So from a security standpoint MacOS X is mostly in the kenel camp, not the microkernel one.

According to Wikipedia - the XNU kernel for Darwin, the basis of macOS, iOS, watchOS, and tvOS is not a microkernel.

The project at Carnegie Mellon ran from 1985 to 1994, ending with Mach 3.0, which is a true microkernel. Mach was developed as a replacement for the kernel in the BSD version of Unix, so no new operating system would have to be designed around it. Experimental research on Mach appears to have ended, although Mach and its derivatives exist within a number of commercial operating systems. These include all using the XNU operating system kernel which incorporates an earlier, non-microkernel, Mach as a major component. The Mach virtual memory management system was also adopted in 4.4BSD by the BSD developers at CSRG,[2] and appears in modern BSD-derived Unix systems, such as FreeBSD.

A huge portion of Linux is drivers and support for different processor architectures. Yes, development was chaotic in the nineties and the code showed. But a lot of engineering effort went into making the core really nice.

https://unix.stackexchange.com/a/223763

With regards to POSIX, it is amazing how well this API is holding up. There are quite a few implementions from GNU, BSDs, Microsoft (at least partial support in MSVC) and a few others (e.g. musl). So POSIX support is a given on most systems. Why replace it with something that breaks existing code?

https://www.musl-libc.org/faq.html

Not to say there is no bloat. But some bloat is the patina that all succesful systems take on over time. Is the bloat small enough to be managed and/or contained? I say yes.

> So POSIX support is a given on most systems. Why replace it with something that breaks existing code?

You're not necessarily breaking existing code. Both macOS and Windows are built on non-POSIX primitives that have POSIX compatibility layers.

It seems that the conclusion most of industry has reached is that, whether or not POSIX is a useful API for your average piece of software, there are still better base-layer semantics to architect your kernel, IPC mechanisms, etc. in terms of than the POSIX ones. You can always support a POSIX "flavor" or "branded zone" or "compatibility subsystem" or whatever you want to call it, to run other people's code, after you've written all your code against the nicer set of primitives.

An potentially-enlightening analogy: POSIX is like OpenGL. Why do people want Vulkan if OpenGL exists? Well, because Vulkan is a more flexible base-layer with better semantics for high-efficiency use-cases. And if you start with Vulkan, the OpenGL APIs can still be implemented (efficiently!) in terms of them; whereas if you start with an OpenGL-based graphics driver, you can't "get to" (efficient) Vulkan support from there.

All that aside, though, I would expect that the real argument is: Fuchsia is for ChromeOS. Google are happy to be the sole maintainers of ChromeOS's kernel and all of its system services, so why not rewrite them all to take advantage of better system-primitive semantics? And Google doesn't have to worry about what apps can run on a Fuchsia-based ChromeOS, because the two ways apps currently run on ChromeOS are "as web-apps in Chrome", or "as Linux ELF executables inside a Linux ABI (or now also Android ABI) sandbox." There is no "ChromeOS software" that needs to be ported to Fuchsia, other than Chrome itself, and the container daemon.

Total speculation: but I seriously doubt that Fuchsia is specifically for chromeOS. The whole point of decent, efficient, simple, non-bug-prone APIs is that you probably want to implement pretty much everything on it. Simplicity and low-overhead allow for generality and flexibility.

If all you wanted to do was support chromeOS - well, typically you can add hacks even to a messy codebase to support specific usecases. And there are a bunch of linux and ?BSD distros that demonstrate that you can adapt such a system to even very small devices; small enough that there's not much niche left below. Moore's Law/Denard scaling may be comatose on the high-end; but lot's of long-tail stuff is generations behind; which implies that even really low-power IoT stuff that linux is currently ill-suited for will likely be able to run linux without too many tradeoffs. I mean; the original raspberry pi was a 65nm chip@700MHz - that's clearly overkill; and even if chip development never has a breakthrough again, there's clearly a lot of room for those kind of devices to catch up, and a lot of "spare silicon" even in really tiny stuff once you get to small process nodes.

But "being able to run linux" doesn't mean it'll be ideal or easy. And efficiency may not be the only issue; security; cost; reliable low latency... there are a whole bunch of things where improvements may be possible.

I'm guessing Fuchsia is going to be worse than linux for ChromeOS - in the sense that if ChromeOS really was what google wants it for, they could have gotten better results with linux than they'll be able to get with Fuchsia in the next few years and at a fraction of the cost. Linux just isn't that bad; and a whole new OS including all the interop and user-space and re-education pain is a huge price to pay. But the thing is: if they take that route they may end up with a well tuned linux, but that's it.

So my bet is that you'd only ever invest in something like Fuchsia if you're in it for the long run. They're not doing this "for" ChromeOS, even if that may be the first high-profile usage. They're doing this to be enable future savings and quality increases for use cases they probably don't even know they have, yet. In essence: it's a gamble that might pay off in the long run, with some applicability in the medium term - but the medium term alone just doesn't warrant the investment (and risk).

Take for example their "replace Intel ME with Linux" project
Agree 100%. I very much doubt it is to replace ChromeOS.
They may not replace ChromeOS, but I'm going to guess they'll replace the Linux kernel with Zircon.
I guess I left a bit too much implicit about my prediction on what Google's going to do: I have a strong suspicion that Google sees the Linux/POSIX basis of Android as an albatross around its neck. And ChromeOS—with its near-perfect app isolation from the underlying OS—seems to be a way of getting free of that.

ChromeOS has already gained the ability to run containerized Android apps; and is expecting to begin allowing developers to publish such containerized Android apps to the Chrome Web Store as ChromeOS apps. This means that Android apps will continue to run on ChromeOS, without depending on any of the architectural details of ChromeOS. Android-apps-on-Android prevent Android from getting away from legacy decisions (like being Linux-based); Android-apps-on-ChromeOS have no such effect.

I suspect that in the near term, you'll see Google introducing a Chrome Web Store for Android, allowing these containerized, CWS-packaged Android apps to be run on Android itself; and then, soon after that, deprecating the Play Store altogether in favor of the Chrome Web Store. At that point, all Android apps will actually "be" ChromeOS apps. Just, ones that contain Android object files.

At that point, Google can take a Fuchsia-based ChromeOS and put it on the more powerful mobile devices as "the new Android", where the Android apps will run through Linux ABI translation. But in this new Android (i.e. rebranded ChromeOS), you'll now also have the rest of the Chrome Web Store of apps available.

Google will, along with the "new Android", introduce a new "Android Native SDK" that uses the semantics of Fuchsia. Google will also build a Fuchsia ABI layer for Linux—to serve as a simulator for development, yes, but more importantly to allow people to install these new Fuchsia-SDK-based apps to run on their older Android devices. They'll run... if slowly.

Then, Google will wait a phone generation or two. Let the old Android devices rot away. Let people get mad as the apps written for the new SDK make their phones seem slow.

And then, after people are fed up, they'll just deprecate the old Android ABI on the Chrome Web Store, and require that all new (native) apps published to the CWS have to use the Fuchsia-based SDK.

And, two years after that, it'll begin to make sense again to run "the new Android" on low-end mobile devices, since now all the native apps in the CWS will be optimized for Fuchsia, which will—presumably—have better performance than native Android apps had on Android.

From a branding perspective, that would be terrible. They've already invested a bunch in Google Play brand that isn't Android Apps (Play Music, Play Books, etc).

Seems more likely they'll allow HTML apps into the Play Store, eventually getting rid of the Web Store entirely. They've already done the WebAPK stuff to glue HTML apps into Android.

If, as I suspect, they'd be willing to rename ChromeOS to be "just what Android is now" (like how Mac OS9 was succeeded by NeXTStep branded as Mac OSX), then I don't see why they wouldn't also be willing to rebrand the Chrome Web Store as "what the Google Play Store is now." Of course, they'd keep the music, books, etc.; those are just associated by name, not by backend or by team.

But they wouldn't keep the current content of the Play (Software) Store. The fact that every Android store—even including Google's own—are festering pits of malware and phishing attempts, is a sore spot for Google. And, given their "automated analysis first; hiring human analysts never (or only when legally mandated)" service scaling philosophy, they can't exactly fix it with manual curation. But they would dearly love to fix it.

Resetting the Android software catalogue entirely, with a new generation of "apps" consisting of only web-apps and much-more-heavily-containerized native apps (that can no longer do nearly the number of things to the OS that old native apps can do!) allows Google to move toward a more iOS-App-Store-like level of "preventing users from hurting themselves" without much effort on their part, and without the backlash they'd receive if they did so as an end unto itself. (Contrast: the backlash when Microsoft tried that in Windows 8 with an app store containing only Metro apps.)

I expect that the user experience would be that, on Fuchsia-based devices, you'd have to either click into a "More..." link in the CWS-branded-as-Play-Store, or even turn on some setting, to get access to the "legacy" Play Store, once they deprecate it. It'd still be there—goodness knows people would still need certain abandonware things from it, and be mad if it was just gone entirely; and it'd always need to stick around to serve the devices stuck on "old Android"—but it'd be rather out-of-the-way, with the New apps (of which old Chrome Apps from the CWS would likely be considered just as "new" as newly-published Fuchsia apps upon the store's launch) made front and centre.

> Seems more likely they'll allow HTML apps into the Play Store, eventually getting rid of the Web Store entirely.

I would agree if this was Apple we were talking about (who is of a "native apps uber alles" bent) but this is Google. Google want everyone to be making web-apps rather than native apps, because Google can (with enough cleverness repurposed from Chrome's renderer) spider and analyze web-apps, in a way it can't spider and analyze native apps. Android native apps are to Google as those "home-screen HTML5 bookmark apps" are to Apple: something they wish they could take back, because it really doesn't fit their modern business model.

> The fact that every Android store—even including Google's own—are festering pits of malware and phishing attempts, is a sore spot for Google.

Lol, citation needed.

Google IO schedule has just been published.

Ironically they have two sessions named "The future of the Android app model and distribution on Google Play".

And then they will stop releasing Fuchsia's (and Android's) source code and become the new Microsoft of the 90s.
Completely agree. I very much doubt Fuchsia is to replace ChromeOS.
Hard to imagine going to be used for ChromeOS before Android. Android runs native on Chromebooks because it shares a common kernel with Android so it can run in a container.

That would be lost which is a huge deal. The new gnu/Linux on ChromeOS would be fine as it runs on a VM and would still work.

Now they could move Android to using a VM but that it less efficient and most importantly takes more RAM and CBs do not normally have a ton of RAM.

With the introduction of Project Treble wouldn't a kernel swap be relatively easy providing the Treble interface contracts are met?
Linux kernel is not directly exposed to userspace Android apps, so it is actually irrelevant.

In fact, starting with Android 7 they have started to lock down NDK apps that try to use APIs not listed as stable.

It is relevant as unless they replace both ChromeOS and Android kernels you lose the ability to run Android native on a ChromeOS box.
> You're not necessarily breaking existing code. Both macOS and Windows are built on non-POSIX primitives that have POSIX compatibility layers.

I was under the impression that MacOS was built from a POSIX kernel, all the way down.

Nope; the XNU (macOS) kernel has Mach semantics (https://developer.apple.com/library/content/documentation/Da...), not POSIX semantics.

XNU does embed BSD (and so POSIX) semantics into the kernel—some of which are their own efficient primitives, since there's no way to efficiently implement them in terms of Mach. But whatever BSD syscalls can be implemented kernel-side in terms of Mach primitives, are.

It has both. Mach system calls are negative, BSD system calls are positive. The BSD side has system calls for stuff like fork() that would otherwise be pretty clearly in Mach's domain.
It would have to be as efficient as Linux as the big plus with ChromeOS is the ability to have a peppy computer on minimal hardware.

I am not convinced a micro kernel would be able to achieve.

> So POSIX support is a given on most systems. Why replace it with something that breaks existing code?

POSIX says that usernames and uids can overlap, and if a program takes either, it should accept the other a well. And if something could be a username or uid, it should be presumed to be a username, and resolved to a UID.

Now assume you have a user "1000" with uid 2000, and a user "2000" with uid 1000... you can see where this goes.

And this is why the BSDs have broken POSIX compatibility and require uids to be prefixed with # when they’re used on the CLI.

No, it does not say that. It says, specifically for certain standard utility programs such as chown and newgrp, that particular program arguments should always be considered to be user names if such user names exist even if they happen to be in the forms of numbers.

Nor is what you claim about the BSDs true. Aside from the fact that using the shell's comment character would be markedly inconvenient, especially since the colon is a far better choice for such a marker (c.f. Gerrit Pape's chpst), the OpenBSD and FreeBSD implementations of chown and newgrp do not have such a marker either documented or implemented, and in fact operate as the SUS says.

User names and user IDs are, by contrast, explicitly called out by the standard as strings and integers, two quite different things which have no overlap.

* http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_...

* http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_...

> But some bloat is the patina that all succesful systems take on over time.

What a nice analogy.

One man’s “bloat” is another man’s feature.
> So POSIX support is a given on most systems. Why replace it with something that breaks existing code?

Because POSIX has horrible security properties, and does not provide enough guarantees to create truly robust software. See for instance, the recent article on how you simply cannot implement atomic file operations in POSIX -- sqlite has to jump through 1,000 hoops to get something pretty robust, but it shouldn't be this way.

The biggest problem is the blocking IO. With async throughout you can design a proper concurrent system.
Is there an example of an os which doesn't have blocking io? To me it seems that blocking io will be needed at some level. You can of course put wrappers around it and present it as async. But in many applications you want to go as low as possible, and in my imagination blocking calls will be the lowest.
It's the other way around. Low level is all async everywhere, blocking is sort of just telling the kernel to wait for async op to complete before running the process.
Midora, Singularity in an OS. Pony in a language.

The goal is to avoid blocking, not to offer async also. That's a lost cause.

Fuchsia once had the goal to offer async only, but then some manager decided that he needs some blocking, and then it was gone.

non-blocking only is lower level than blocking. You can always wait indefinitely for that callback, but usually you have a default timeout. L4 for example offers that API.

The Linux kernel has Async IO. For a while now.

You don't need async for a proper concurrent system. Systems have been concurrent before async IO. The trick is that when a process does an IO you yield it and put it on a wait list and run literally anything else until the kernel receives the OK from the hardware control and resumes the process.

Using Async IO in Linux merely means your specific thread won't be immediately suspended until you get data (or it's in a reasonably close cache)

It would be quite silly if Linux would wait for every IO synchronously, any single core system would immediately grind to a halt.

Which isn't part of POSIX.
I thought you were speaking about some Linux specific APIs.
There are some Linux specific APIs that build on this and I've got the most experience with Linux so I was refering to that.

But Async IO is part of POSIX.

I was mostly responding to the comment which cited synchronous IO as a problem with POSIX. Linux is most widely used so on top of being my primary domain on the issue, it's going to ensure best understanding.

That's not to say it's implemented as efficiently as it could be.

See here: https://linux.die.net/man/7/aio

AFAIK, system-specific APIs such as epoll or kqueue are the way to go if you're serious about performing asynchronous IO?

(comment deleted)

  > Linux kernel has Async IO
Linux offers some async io features, but does not offer async throughout.

In a fully async platform you would be able to do general-purpose programming without ever needing to use multithreading.

Example of a situation you can't do in linux: have a program doing select(2) or equivalent on both keyboard input and network input, in a single thread.

Since linux does not support this, you are steered to adapt solutions that are more complicated than a pure async model would be,

* Spin constantly looking for activity. These heats up your computer and uses battery.

* Have short timeouts on epoll, and then glance for keyboard input. This leads to jerky IO.

* Have child processes block on these operations and use unix domain sockets to feed back to a multiplexor (fiddly, kernel contention).

* The child-process thing but with shmem (fiddly)

* Something equivalent to the child process thing, but with multiple threads in a single process. (fiddly)

You would think that x-windows might help out here. What if you had a socket to X, and then multiplexed on that, instead of looking for keyboard input from a terminal? This opens new issues: what if X has only written half of an event to your socket when select notifies you? Will your X library handle this without crashing?

Rurban's comment above is correct. Linux is not async throughout.

On OSs that offer kevent you can get a fair bit further, but (I believe) you still can't do file creation/deletion asynchronously.

This is broken. (Woke from a sleep, face-palmed. I have been in Windows IPC land and got my wires crossed, sorry.) In linux you can select on both the stdin fd and network sockets in a single call. There is a way to get a fd for AIO also. AFAIK the sync-only file creation/deletion stands.
Linux is async throughout since it can do task switching on blocking.

You're not the only task running.

Or do you expect Linux to pause the system when you read a file until the DMA is answered?

Linux itself is fully async, anything blocking (even interrupts to some extend) will be scheduled to resume when the reason it blocked is gone or alternatively check back regularly to resume.

A program running on Linux can do a lot of things async as mentioned via POSIX AIO. It's not impossible, go seems to do fine on that front too (goroutines are put to sleep when doing blocking syscalls unless you do RawSyscall).

The conclusion that lack of 100% asynchronity means it can't be properly concurrent is also wrong. As evident that sending something to disk also doesn't not halt the kernel.

And yet here I am, working day in and day out on a POSIX system, uptime in the years range... strange.
(comment deleted)
Anything can be made to work with enough effort! Imagine how much easier it would be if POSIX actually had a better API.
> So POSIX support is a given on most systems. Why replace it with something that breaks existing code?

POSIX is a lowest common denominator API, its under specified and loosely interpreted. Which follows from its initial goals, which was basically to specify the bits common between various UNIX implementations. Those implementations obviously didn't want to change their implementation to match a rigid standard, so a lot of wiggle room exists in the standard.

The end result is that is pretty much useless for anything beyond "hello world" kinds of applications, both in terms of portability, as well as actual behavior (I could list a lot of cases, but lets leave that to google, with the starting idea to look at a couple posix API's, say close()'s errno's and the differing cases and what causes them on different OS's/filesystems). That is why there isn't a single OS out there that is _ONLY_ POSIX compliant. You need look no further than the 15 year old https://personal.opengroup.org/~ajosey/tr28-07-2003.txt and consider that the gap has widened as more performance or security oriented core API's have been introduced and linux's POSIX layer is further refined upon them.

Plus, the core API's in no way reflect the hard reality of modern hardware, leaving the standard even more under specified in the case of threads and async IO, which have been poorly bolted on.

Then there are all the bits everyone ignores, like the bits about the posix shell (ksh), and how certain utilities behave, while completely ignoring important things like determining metadata about the hardware one is running on.

I leave you with: https://stackoverflow.com/questions/2693948/how-do-i-retriev...

and https://stackoverflow.com/questions/150355/programmatically-...

Which is pretty basic information about a modern machine.

> POSIX is a lowest common denominator API,...

Only useful for CLI tty old style apps and daemons.

> But a lot of engineering effort went into making the core really nice.

I quite like Linux but I would not say the current state of the core kernel is "really" nice. Somewhat nice, maybe, but "really" nice? You just have to look around to see exemples of non-nice things (too much things in some headers, jumping between source files back and forth for no reason, excessive use of hand coded vtables, internal "framework" that are not as simple as they should, at other time lack of abstractions and excessive access to internals of structures, etc). Granted, it is way less buggy than some other softwares, but I think I'll know when I read a really nice core, and for now I've never had the feeling that Linux has one.

Still find it quite good, to be clear.

Is TLPI available for free now? It's a great book and I hope that people will continue to support both NoStarch and the author.
> Sometimes it's even more simple re-inventing the wheel than understand why a wheel was build a fractal design

When I saw your comment I immediately was reminded of Joel on Software: "The single worst strategic mistake that any software company can make is to rewrite the code from scratch."[1]

[1] https://www.joelonsoftware.com/2000/04/06/things-you-should-...

I live by that quote every day, but it's not a silver bullet.
you usually get it right on the second time. only hope the first dont get too popular.
In my experience the second time leads to architecture astronautics... third time is when you get it right.

Althought in OS space one might argue that second generation of time sharing OSes (TOPS-10, ITS, MCP...) got more things right than are right in Unix and such.

I like the term "architecture astronautics". There is probably a joke hiding somewhere in a plain sight about "Plan 9" wrt Unix...
For OS it means that you should pick one abstraction for process state and one abstraction for IO and in fact you can have same abstraction for both. In this view Plan 9 makes sense while modern Unix with files, sockets, AIO, signals, various pthread and IPC primitives and so on does not (not to mention the fact that on every practical POSIX implementation various such mechanisms are emulated in terms of other synchronisation mechanisms)
Perhaps I'm subject to a giant whoosh here, but this subthread is recapitulating The Mythical Man-Month piece by piece.
Reinventing well explored areas of software engineering from first principles!
or run the entire business (when it works) without which the whole company would grind to a halt.

A rewrite made no sense to me since I'd end up maintaining version A alongside version B with B constantly lagging A unless I severely restricted the scope of B in which case it'd be an incomplete (though better written/more maintainable A).

Instead I went the isolate (not always easy), shim, rewrite, replace, remove shim approach.

It does feel a bit like spinning plates blindfold sometimes in the sense I'm always expect to hear a crash.

So far I've replaced the auth system, the reports generation system, refactored a chunk of the database, implemented an audit system, changed the language version, brought in proper dependency management, replaced a good chunk of the front end (jquery soup to Vue/Typescript), rewritten the software that controls two production units and implemented an API for that software so that it isn't calling directly into the production database.. and done it without any unplanned down time (though I'm still not sure how - mostly through extensive testing and spending a lot of time on planning each stage).

It's slower because I have to balance new features against refactor time but I have management buy-in and have kept it, mostly through been extremely clear about what I'm working on and what the benefits are and have built up some nice momentum in terms of deploying new stuff that fixes problems for users.

The really funny part is that even though I'm re-factoring ~40% of the time I'm deploying new features faster than previous dev who wrote the mess...because I spent the time fixing the foundations in places I knew I'd need for new features going forwards.

It isn't, but in twenty years getting paid to write software I have far more regrets where I rewrote and shouldn't have, than where I should have rewritten and didn't.

If you're Google and you have people with these abilities kicking about, it's probably not a crazy investment to see what happens. We've got a HN story elsewhere in the list on post-quantum key agreement experiments in Chrome, again there's a fair chance this ends up going nowhere but if I was Google if throw a few resources at this just in case.

But on the whole I expect Fuchsia to quietly get deprecated while Linux lives on, even if there's lots to like about Fuchsia.

Tips on surviving a rewrite in a mid-large sized company.

1) Get yourself placed on the "Legacy team" that is supposed to "minimally support the application while we transition to the new system".

2) Do whatever the hell you want with the code base (i.e., refactor as much as you want) because nobody cares about the boring legacy system.

3) Respond directly to user/customer needs without having to worry about what upper management wants (because they are distracted by the beautiful green-field rewrite).

4) Retain your job (and probably get a promotion) when they cancel the rewrite.

Alternatively, tips for not surviving a rewrite in a mid-large sized company.

1) Get stuck on the "Legacy team", as expensive contractors are called in to produce the rewritten version from scratch in an unrealistically small fraction of the time the original took.

2) Be told you can only fix bugs (with more layers of short term hacks), not waste time with refactors that have "no business value" for a code base that will be scrapped "soon".

3) Don't add any new features, to prevent the legacy system becoming a perpetually moving target that would delay the beautiful green-field rewrite even longer.

4) Hate your job, and watch your coworkers leave in disgust, further starving the team of resources, until you end up quitting too.

My last two IT jobs ever were both for businesses which cancelled huge rewrites after being sold to another company. Someone up top pitched the businesses as white elephants ripe for massive cost savings half-way during the rewrite.

The programmers with the political skills to get put in the "Rewrite team" will have had their jobs in the "Legacy team" protected in case of project cancellation. Or they will knife you in the back to get their old jobs back -- they will know about the cancellation and have plenty of time to maneuver before you know what's going on.

There is another path to survival:

1) Get on the new team

2) Ensure to get into the more interesting tech modules

3) Improve your CV

4) Use your soft skills to mingle with everyone and be aware of where the wind blows

5) In case of iceberg ahead, jump ship to a better job taking advantage of the new skills

There is yet another path to survival:

1) Do a startup

Or, simpler

1) Quit job 2) move to the woods 3) shun all electrical devices 4) mediate until you become one with the universe

On the other hand, Firefox today is much better than Netscape ever was. And with the never re-write philosophy we wouldn’t have Rust.
I think that actually speaks to Joel's point. None of those were rewrites.

Firefox started as a fresh UI reskin for the old browser interface, and indeed continued as "mostly a skin" for years (incidentally, so did Chrome).

(You can still get the non-firefox skin incidentally, it's "Mozilla Seamonkey")

Then the Rust rewrite. Rust was a hobby project, and they rewrote layout engine interface, and nothing more than that. Then CSS.

Now it's an HTML parser, a layout engine, a parallel CSS engine, and a GPU webpage renderer (still "missing"/non-rust are 2d compositing and javascript). Each of those components replaced another in a working version and there were at least beta versions of firefox of all the parts.

You don't know what we would have instead.
Potential is worthless. We have Rust, we don't have what might have been produced had Rust not happened, and as far as I know, no one is working on that hypothetical product.
"Bloat" is a loaded term. It's meaningless to say "Look at all this code! It's bloated!" when you don't know the reason those lines are there, and comparing two "solutions" is meaningless when they don't solve all the same problems.

Mainly, I'm just getting tired of people trying to cut things out of the solution by cutting them out of the problem.

Saying that it's possible to solve a problem in a simpler fashion is fine. Saying a problem shouldn't be solved, that nobody should have that problem, so therefore we won't solve it, is not fine if you then turn around and compare your cut-down solution to the full solution.

It's still a shame they wrote something from scratch but they didn't do it in Rust, so they can avoid fixing a ton of bugs over the next 20-30 years.
The kernel was started before Rust 1.0, so I think that was a reasonable decision. Additionally, since it's a microkernel, the kernel is pretty small. That helps, both in the implementation now and if they ever decided to replace it. And future components can be in Rust if they want.
Honestly curious: why Rust specifically and not any other "secure" systems language?
Rust specifically because it has the zero-overhead safety properties via the borrow checker. This is something that no other safe language has, as far as I know. They generally either make you deal with a GC if you want safety, or deal with raw pointers and manual memory management if you want low overhead.

And the borrow checker, along with move semantics by default and the Send and Sync traits, help with several other aspects of safety as well; the Send and Sync traits encode information on what can safely be moved or shared between threads, and move semantics by default (and checked by the compiler, instead of at runtime as in C++), make it easier to encode state transitions on objects in ways that you can't try to perform operations on an invalid state.

But as others point out, Zircon, the Fuchsia kernel, was written before Rust 1.0 was released, and even after Rust 1.0 was released and stable it was still a bit rough to work with for a little while.

If you were starting a new project from scratch today, I'd seriously ask why not Rust, though of course there are other reasons why you might not choose it. But given the history, and how new Rust was at the time when this project was started, it makes a lot of sense.

>If you were starting a new project from scratch today, I'd seriously ask why not Rust, though of course there are other reasons why you might not choose it. But given the history, and how new Rust was at the time when this project was started, it makes a lot of sense.

While I'm not saying that rust is bad, Rust as a kernel language won't help you here. The simple proof is that Redox-os (which is a microkernel built in Rust) was found with the same class of bugs your average OS had.

> The simple proof is that Redox-os (which is a microkernel built in Rust) was found with the same class of bugs your average OS had.

Source? I haven't heard about these vulnerabilities.

In a kernel, there are several places where Rust won't help you. There are certain things you have to do that are going to need unsafe code, and need to be audited just as much as code written in any other language. The kernel is also a place ripe for logical vulnerabilities to creep in; it is the main arbiter of what is allowed and is not allowed from processes, so many possible vulnerabilities are logical, not memory safety issues.

On the other hand, when a kernel gets complex enough, there are places where memory safety or thread safety issues can come up even in code which doesn't require particular unsafe features and which is not involved in a security role; just things like manipulating complex data structures in multiple threads. This kind of code is the kind of code in which Rust can help catch issues; and it definitely still happens even when very good programmers, with good code review, work on the kernel.

Rust is not a panacea; it is not a cure-all. But it reduces the attack surface considerably, by containing the amount of code that is exposed to certain very common classes of bugs.

(comment deleted)
Despite the progress made over the last 24 months, I don't think Rust is ready for embedded primetime. Not to mention, the Rust learning curve is VERY steep for these guys coming from C.

Edit: to clarify ... I don't mean that they won't be able to understand the concepts ... I mean that they will lose a lot of productivity up front and won't appreciate the backend gains enough for there to be a political consensus to switch.

I think the 'Better C' subset of D lang is a better match for this particular case.

https://dlang.org/spec/betterc.html

Why? The "Better C" subset of D is not memory safe, which is one of the main reasons for suggestion Rust over C++ as an implementation language. What does D offer you over Rust in this case? Better metaprogramming facilities? Is that something you really want to rely on significantly in a microkernel?
Bonus though, I'm pretty sure the fuschia user space has rust support already. I think their alternative to vim (xi maybe? I think it was.) is written in rust natively with python api bindings for plugin support.
Yes, xi (https://github.com/google/xi-editor) is a text editor written in Rust. It's not exactly an alternative to vim, it's more of a text editor microkernel that can have various different frontends and plugins attached which use JSON-based IPC to allow their implementation in whatever language you want. So, on macOS you can implement the frontend in Swift, and write plugins in Python or Ruby or Rust or whatever you like. On Fuchsia, the frontend is in Flutter.
It looks like while the core kernel and a lot of components are written in C++, there are a number of components written in Rust: https://fuchsia.googlesource.com/garnet/+/master/Cargo.toml

One of the advantages of a microkernel architecture is that it is relatively easy for different components to be written in different languages.

It’s almost if humans have a habit of making big things and moving on after enough of the voices behind big thing die and we all forget the original reasons

Fuschia will become another monolith where the assumptions no longer matter given tech of 2035 or whatever, and something new will happen

IMO the better model would be a simple hardware BIOS type thing with a standardized build system embedded that enables completely custom environment builds from whatever source repo people want

These big monoliths seemed more valuable in a pre-internet is everywhere world, so they include the kitchen sink too

Fuchsia is not a monolith in a design sense, though -- it's a microkernel, and the device interface is based on IPC, which means you can keep the kernel clean and simple, and put drivers elsewhere. For comparison, the majority of the Linux source tree is drivers and file systems. The kernel proper is pretty small. But because it's a monolith, it all has to live and evolve together.
I’m not speaking to the technical implementation

I’m talking to the commentary about a dated cultural artifact sucking, championing of new hotness, a new culture that will develop around it and eventually fade as technology changes and the peddlers of the latest and greatest will largely say the same “wtf @ this mess”

But downvote reality of human progress that has occurred over and over

The opinionated nature of humans is bizarre, given that we keep, in a social way, repeating our dead relatives

We can fix the future from a past that won’t live to see it

It’s all nonsense for the majority of humans, but this little microcosm called HN has its finger in the pulse of what we’ll need in 2040!

(comment deleted)
Maybe they've developed fear of FOSS after this oracle debacle and just want to greenfield the whole thing out of fear.
A lot of people speculate that that's why Flutter was written in Dart instead of Kotlin or something else. Google wanted to use a language they already have a lot of investment in, and for some reason didn't pick Go. Which honestly seems odd to me since Go can be compiled all the way down to binaries already, they had to invent that compiler for dart, but whatever. Dart is super cool and I'm looking forward to using it in Flutter's user space.
Dart supports generics, has a good package manager and their devs are open to the history of programming language's design and modern tooling.
Go isn't interpreted, making hot-reload impossible.
I think it's pretty clear why they created Fuchsia:

1. They want a modular microkernel OS with modern capabilities.

2. They want to eventually replace their internal Linux based OS with Fuchsia.

3. Fuchsia, or parts of it, will be the basis for all of their products.

4. They want to control the direction of their own OS.

(comment deleted)
(the below is my ignorant understand of drivers in Fuschia and linux)

It's not just the kernel design, it's the driver design as well. Fuschia has drivers being ELF binaries that hook into Device Manager process[0]. I believe they are developing a standard API for how drivers interact with Fuschia.

Linux doesn't really have this today, which means that the driver must be in the kernel tree to have it keep up with the kernel's interface. And with ARM lacking something like a BIOS for phones, each chip that Qualcomm et al make requires a full BSP to get it working. And from what I understand, Linus and others don't want these (relatively) short-lived processors to be checked into mainline linux (plus you have the lag time of that code being available). Android's Project Treble[1] aims to address this some by creating a stable API for hardware makers to use to talk with Linux, but it is not an ideal solution.

[0] https://fuchsia.googlesource.com/zircon/+/HEAD/docs/ddk/over...

[1] https://android-developers.googleblog.com/2017/05/here-comes...

> Linus and others don't want these (relatively) short-lived processors to be checked into mainline linux

I don't think that's true. e.g. 4.17 is accepting code to run Samsung Galaxy S3 (released nearly 5 years ago). It is left to volunteers since most vendors dump a source release to comply with the GPL but themselves don't upstream it to Linus.

Because it can take 5 years, in which time the product is obsolete.

But, the core idea behind SBSA and SBBR is to form a common platform to which the vendors conform their machines so they don't have to keep up-streaming special little drivers for their special little SOCs. Only time will tell if its a success, but a large part of the community has effectively declared that they aren't really going to conform to the ideals of a standard platform. So, the ball keeps rolling and new DT properties keep getting added, and new pieces of core platform IP keep showing up. At this point arm64, despite just being a few years old already looks as crufty as much older architectures with regard to GIC versions, dozens of firmware interfaces, etc due to the lack of a coherent platform/firmware isolation strategy.

There is device tree [0] to resolve the problem with chip support but I guess it would make "universal" drivers more complex and harder to maintain if all hardware features are to be supported (in an effective way). Seems like the Fuschia model might handle this better.

[0] https://en.wikipedia.org/wiki/Device_tree

Didn't think I will see a day where Linux-bashing didn't include a comparison to FreeBSD
I honestly don't get what your 3rd reference is complaining about. That software has... more features and is faster (with the tradeoff being code size)?
This was, more or less, the driving philosophy behind BeOS. Therein lie some lessons for the prospective OS developer to consider.

Say what you will about how terrible POSIX is, Be recognized the tremendous value in supporting POSIX: being able to support the mounds and mounds of software written for POSIX. It chose to keep enough POSIX compatibility to make it possible to port many common UNIX shells and utilities over, while Be developers could focus on more interesting things.

So where were the problems?

One huge problem was drivers, particularly once BeOS broke into the Intel PC space. Its driver interface and model was pretty darn slick, but it was different, and vendors wouldn't support it (take the problems of a Linux developer getting a spec or reference implementation from a vendor and multiply). This cost Be, and its developer and user community, quite a bit of blood, sweat, and tears.

Another big problem was networking. Initially, socket FDs were not the same thing as filesystem FDs, which had a huge impact on the difficulty of porting networked software over to BeOS. Eventually, BeOS fixed this problem, as the lack of compatibility was causing major headaches.

The lesson: if you are looking to make an OS that will grow quickly, where you will not be forced to reinvent the wheel over and over and over again, compatibility is no small consideration.

Android and ChromeOS don't expose POSIX to userspace, it hasn't hurt them.
Which points to what ended up happening with BeOS: it became an internet appliance OS, and then the core of a mobile product. These were areas where the hardware and application spaces were quite constrained, and BeOS's competitive advantage in size and performance could be leveraged.
LOC is not a good way to measure the "bloatness" of a software. There is a significant amount of device driver code in linux kernel. With the number of devices exponentially increasing, it is inevitable, but it does not make the kernel more complex.

A truck is not more complex than a car. A truck is bigger because it is designed to carry more load.

That article by Columbia claims that dbus is not POSIX, yet the communication occurs over a UNIX domain socket. I do not think that is a good example of not using POSIX for IPC. The underlying mechanism that makes it work is part of POSIX. It just extends what is available to provide IPC from user space in a way that people find more convenient.
Bloat is what you get when your software has to face the real world.

Yes the Linux kernel is bloated, bloated with tons of code responsible for making it work on exotic hardware. Yes x86 is bloated, let's just remove those useless AVX instructions. Yes MS Excel is bloated, who the hell is using all those features [1]?!

You can only have two alternatives : either your software is “bloated”, or then it will be replaced by something else, which is more “bloated” and works for more people.

Notice than I'm just criticizing the “bloat” argument, I'm just not criticizing Google for creating a new OS from scratch, which can bring a lot on the table, if done properly and includes innovations from the past 30 years, like was done when creating Rust for instance.

[1]: https://www.joelonsoftware.com/2001/03/23/strategy-letter-iv...

I'm enthusiastic about Fuchsia, i really think there is a lot to gain by breaking with the old conventions, especially when you look at what is hindering true realtime computation approaches.

As a nice byproduct Google has a hedge against Linus dying and his replacement being incompetent at managing the community.

Is Google actually good at community collaboration? I honestly don't know. But I would imagine that they require CLA and that would hinder the community. It may be a big problem when BDFL dies if there is no blessed successor, but what is a greater trade off?
I must admit I find the development of Kubernetes extremely well organized fir the sheer size of the project.
Google did a great job starting the Kubernetes community, but they then contributed the project to CNCF (which Google also helped launch). Google remains the top contributor to Kubernetes, but even as their contributions remain substantial, their % of the total contributions is going down, due to the large number of other organizations now backing Kubernetes.

https://k8s.devstats.cncf.io/d/8/companies-statistics-reposi...

(Disclosure: I'm executive director of CNCF. We also build that DevStats tool.)

I think the point is, they don't have to be.
I think CLA is pretty standard for any open source project. I think the first one I ever signed was for Emacs. Emacs has done pretty well and the CLA doesn't seem to be putting many people off from contributing.
I imagine that it makes any potential litigation or dispute much simpler. Even if the license is FOSS, any sort of litigation could have hundreds or thousands of parties involved.
One of the core abilities of Linus is knowing when to say no (the how is more debatable).
Wouldn't the hedge against an incompetent Linus replacement just be a fork of the kernel?
Right now it kind of reminds me of BeOS, which could do absolutely incredible concurrent realtime low latency media processing but was absolute torture to get a proper Web Browser working.

The problem with legacy support is that it drags in the braindamage you were trying to avoid by rewriting the OS in the first place. But without legacy support it's almost impossible to grow beyond the toy OS stage. It's the whole "So, what do I do with it?" factor.

A couple of former BeOS folks are actually working on Fuchsia: Travis Geiselbrecht and Brian Swetland.
Travis Geiselbrecht is responsible for NewOS (http://newos.org/). The kernel in Haiku, the open-source BeOS recreation, was forked from NewOS' kernel.
I watched a BeOS demo video ( https://www.youtube.com/watch?v=BsVydyC8ZGQ ) the other day and some of that stuff is /still/ impressive.
I had a roommate in college who had a BeBox with the twin PPC 603(?) processors and a row of LEDs on the front configured to show the current load of each CPU.

It was super cool and could make these absolutely insane multimedia demos, but he was forever trying to get software to work on it. Whatever POSIX compatibility it had was absolutely insufficient for modern (at the time) applications. Everything required some rewriting by hand, and there were definitely crashes. Worse, Netscape didn't release a BeOS version of Navigator so he was always hacking up the latest Mosaic release to try to get it working. I was running FreeBSD at the time and it was the polar opposite. Sound barely worked, the only video players were slow and unreliable open sourced school projects, but it was front and center on the newfangled Internet thing that was going around at the time.

from comments from people who worked on it (e.g., https://twitter.com/MCSpaceCadet/status/968666523425386497 https://twitter.com/slava_oks/status/958908471801294850 ), Microsoft seems to have reached this stage with their Midori project. This was a ground up OS project based on the usual suspects from the research world i.e. object-capability security, microkernel architecture, a new lightweight process model, memory-safe systems language, zero-copy IO etc.; the project lasted 9 years and occupied over 100 senior engineers at its peak. They tried various strategies to run it on top of Windows, run it on top of Linux, run Windows on top of it, run it on Hyper-V, etc etc. before eventually giving up.
Google has the advantage of having two consumer platform (Android and ChromeOS) running on Linux, but with the majority of application code written on top of additional abstractions on top of Linux so a lot of it would still run if the appropriate runtimes were ported over to Fuchsia.

Google is also developing Fuchsia openly, if quietly, giving developers a preview of where they are going. Microsoft developed Midori mostly in secret, and while we've heard a little bit about what they did in that project from blog posts and Twitter threads, nothing official has ever been released publicly.

And on the server side, virtualization and containerization are huge and growing, as many people find the benefits in flexibility, repeatability of deployment, and incremental billing to outweigh the absolute overhead over bare-metal performance. Fuchsia seems to support virtualization as a core part of the API, allowing you to run Linux VMs when you need to, and it could be possible to port containerized applications piecemeal to Fuchsia with some components still running on Linux on co-located or even the same hardware.

I feel like this is one of the benefits of the relatively simpler POSIX style API design, and extensive use of sockets for IPC, over the fairly complex, heaviweight Win32 API and NT kernel. I feel like a lot more software that runs on Linux (and is generally portable to several other POSIX-ish OS's) would be a lot easier to port to Fuchsia, and in an incremental way, than all of the software that runs on Windows systems would be to port to Midori.

They did not gave up, management pulled the cord on the team.

Joe mentioned at his Rustconf talk how hard it was to convince the Windows team, even with the system running in front of them.

When people are religiously against something, no amount of technical achievements is going to change their mind.

That is incredibly disheartening to hear. I wonder if Satya knows about this point of view.
It was on the closing Keynote

RustConf 2017 - Closing Keynote: Safe Systems Software and the Future of Computing by Joe Duffy

https://www.youtube.com/watch?v=EVm938gMWl0

You can get more glimpses of how things went when reading between the lines on his Midori postmortem, InfoQ content or occasional twitter comments.

Shouldn't they have launched it as an alternative to Windows, for those users who want the benefits (reliability, security, whatever) rather than abandoning it? Make it free ($0) and open-source to encourage adoption. And why couldn't it run Windows in a VM for backward compatibility?
I personally agree, but the counterpoint is that this would have taken Microsoft's already confusing and uncertain product and platform roadmap and make it even much worse. I think those worries were absolutely founded even though I think it would've been worth it anyway.
>BeOS, which could . . . but was absolute torture to get a proper Web Browser working.

Ah, but that is exactly why I'm paying attention Fuchsia even though in general I ignore new OSes: it would not be hard for the organization behind Fuchsia to instruct the 1000-or-so developers it employs who maintain a web browser to make the web browse runs on Fuchsia.

(and it is open-source).

Isn't there a way Linus could do what Debian did and ensure that the project lives on regardless of who's in charge?
That would be easy, but ensuring the same level of quality would need someone who thinks like Linus about these things.
More importantly, Fuchsia is not GPL.
WHY should everything be GPL-ed? Capitalism is an ethical, meritorious system rewarding hard-work and skill and GPL runs counter to everything capitalism stands for.

Not to mention that the fat profits capitalism bestows on Google FUNDS fuchsia

  > Capitalism is an ethical, meritorious system rewarding hard-work
Um... no it isn't. Meritorious only for those on top. While I agree that Google doesn't need to GPL Fuschia, GPL was imagined as a direct response capitalism's very pro-owner and anti-customer approach to distribution and rightsholding.
> Capitalism is an ethical, meritorious system rewarding hard-work and skill

Did you drop an /s or something?

Captialism doesn't give a shit about eithics or merit either way. The only thing worth a damn is capital, which is a pretty good motivator for all kinds of unethical and corrupt practices.

Not that GPL would necessarily be a good thing in this case.

> GPL runs counter to everything capitalism stands for.

That's the point (or at least one of them). Though I personally don't care if it is GPL or not, as someone interested in perhaps using this OS for commercial purposes at some point it's not being GPL is a slight plus for me.

However, one key point of the GPL is to create a commons (of software, hardware, protocols, etc.) that can't be exploited for gain by capitalists, that can't be exploited for economic rent, that can't be laden down with copyrights and patents. A system that is actually, truly free (as in freedom). Which is important to understand if you want to be intellectually honest.

> GPL runs counter to everything capitalism stands for.

As a point of fact, it doesn't. Stallman himself sold GNU Emacs in the early days, and it was GPL'd from the start.

Your statement is entirely true but is non-sequitur.

Capitalism is not "the economic system in which things are bought and sold with money", it's a much more particular subset of all those types of economies (namely, capitalism is the type where the primary resources and means of production are privately owned).

It's incidentally TRUE that GPL is not anti-capitalist. But it's also true that you can consistently both sell things and be anti-capitalist. Selling things happens in most economic systems, capitalist or not.

> Capitalism is not "the economic system in which things are bought and sold with money"

Well, at least according to Marx (c.f. Capital) capitalism is the system where things are bought and sold with money. If you read first few chapters of Capital you'll see that Marx explains this in various ways such as characterizing capitalism with division of labour where instead of producing bunch of commodities, workers produce one commodity and sell it for money with which they can buy other commodities. And according to, again, his definition communism is the society after this type of commodity production, i.e. the mechanism that produces value (money) is stopped in the sense that people stopped exchanging things for money.

You may not care of Marx's definition, but I just wanted to note for completeness.

Indeed, I don't defer to Marx. But that said, it's been a while since I read him much. I suspect you're conflating Marx describing Capitalism with defining it.

We can describe the idea of buying and selling with money as certainly being a characteristic of Capitalism without asserting that it's a defining characteristic that is absent in other systems.

To be blunt, buying and selling with money is FAR older than Capitalism.

https://en.wikipedia.org/wiki/Capitalism is actually pretty good and neutral

I'm really sorry that I will not be able to provide any source to you at the moment because I'm very busy, but for what it's worth I'll write you what I remember from my readings (I studied Marxism extensively for a time out of interest but I never had a formal education in sociology, so I'm not an expert, I'm a regular software engineer). Also disclaimer, I tend to agree with Marx on a lot of issues so my ideas might be biased. My terminology is also a bit rusty.

Capital starts by explaining commodities. This is because: (1) Marx tries to explain some bit of the terminology of his period's economic terminology so he needs to do some ground work; (2) commodity production is an important aspect of capitalism that he refers all throughout his works. My main point is that the force that made capitalism possible and the force that sustains capitalism is one, which is the accumulation of value. As Marx explains in later chapters, a things will have different types of values. For Marx, nothing has any intrinsic value and its money-value is determined at the moment of trade. That is the force that generates value inside economy is the act of selling commodities. The same force causes the distinction between bourgeousie and prolateriat (c.f. Marx's definitions of social classes) and the same force caused the transformation from earlier economic system to capitalism (which answers your complaint). Now this brings us to the end of capitalism, which Marx very insistantly argues that end of capitalism is the seizure of value generation which is equivalent to saying society being moneyless. E.g. one misconception people have is that Marx was also against labor-vouchers, but this is not true, as explained in Critique of Gotha's Programme, since labor-vouchers do not generate/accumulate value, their value is not determined at the moment of trade. Anyway, this also relates to Marxist criticism of anarchism. For anarchism capitalism --> communism is the seizure of capitalist state. But Marxism thinks this is fundamentally wrong because capitalist state is generated by capitalist mode of production. So, you will want to eliminate the capitalist mode of production instead of the state itself, because as long as c.m.p exists there is no way to kill capitalism, so state will revive. For Marxism you first need to eliminate the economic system that makes capitalism possible, i.e. accumulation of value, and then ultimately kill the State and class society as they're caused by capitalism.

> Capitalism is an ethical, meritorious system rewarding hard-work and skill

This belongs on some a list of "naive things Americans believe"

The fervor visible in your response validates the significance of a license change.
How so... It just prevents you from co-opting someone else's GPL software without contributing back. For that matter, I'm a pretty big fan of LGPL for libraries.

Nothing forces anyone from using someone else's GPL software. You aren't prevented from using GPL software either. In fact, it has a price, and that price is you contributing changes and directly interfaced software back into GPL. The price isn't money.

Beyond this, open-source/floss is meant to create a commons in terms of libraries and software that aren't commercially encumbered. Way too many things (particularly drivers) are locked away and stop working.

Wikipedia article [1] mentions: "It is distributed as free and open-source software under a mix of software licenses, including BSD 3 clause, MIT, and Apache 2.0."

Please also check Zircon's kernel license [2]. The PATENTS thing doesn't look though.

Or did you meant that it doesn't have a GNU license with a clause that forces others to distribute the source?

Probably it doesn't matter that much to them as by being the developers of the software they can make changes in their software and just not share it.

Anyway, I'm not happy with more Googlification and them having the "expertise monopoly" in yet another piece of tech.

Things like ChromeOS and Chromecast shows that they're not willing to create an open OS.

[1] https://en.wikipedia.org/wiki/Google_Fuchsia [2] https://fuchsia.googlesource.com/zircon/+/master/LICENSE

Why are you conflating a GPL-compatible license with GPL-licensed software?

If Fuchsia shipped on phones in binary form, consumers receiving those phones would have no legal basis for requesting the source code of precisely what they received.

GPL-compatibility only speaks to the mixing of code having one license with GPL code.

I certainly confused GPL with open source. Sorry about that. I also agree that it would suck phones not having to share the source. Anyway, the current state of Android is far from ideal with most of drivers being closed blobs.

Of course a non GPL license would put us in a worse position but the current situations also has limitations.

I wonder if GNUv3 could solve the blobs drivers issue.

I find it interesting to note that the core fuchsia OS comes with "magma", "escher" and "scenic", which seems to be core OS services for composing one 3D scene across multiple processes ("shadows can be cast on another process without it knowing about it")

Is that a hint that Fuchsia is a VR-first operating system?

I would say it is more of an hint that the material design team was heavily consulted when Fuchsia was conceived.
Drop shadows in 2D window managers are pretty common, is it not referring to that?
From the sound of it, I assumed it was building up a 3d world scene graph composed by objects supplied by independent processes. Maybe I'm reading too much into it.
Yeah I think the "physically based 3D renderer" is a bit misleading because it makes you think "ah, like Blender or Unreal Engine 4", but actually I think they just mean they are doing window translucency and drop shadows in a physically correct way (e.g. there is an actual light source) rather than faking it. It is still used to render mostly-2D windows.

(This is my assumption anyway - I haven't tried running it)

I think you assumption is spot on.

Android already does physically correct soft shadows in real time.

The initial design of material would have allowed way more space manipulations, like making a view rotate on any axis.

So the shadow implementation allows to remain correct even in this kind of case.

It is kinda sad that the final design forbids this, a simple raster shadow would have been enough to just signify the elevation.

I want to downvote you for using VR first OS, which is technobabble, however I want to upvote you for sharing useful info about the topic. So I did neither.

Augmented reality pretty much requires us to shrink displays down to contact lens sizes because we already figured out almost nobody will pay to strap a smartphone to their face.

Then it requires us to create and popularize an entire new method of interacting with your computer.

Then this needs to be cheap enough to get in everyone's hands.

It would be surprising if this only took 20 years.

This is about drawing dumb drop shadows.

We could argue about the difference between OS and presentation layer but that battle may already be lost.

This article has some details about that:

https://9to5google.com/2018/04/06/fuchsia-friday-graphics-ga...

Scenic will have support for what it’s calling “stereo cameras.” What this means is there can be two views into the same scene. Each camera can also be independently moved or turned for a different view. The most obvious reason for this capability is virtual reality.

Not really, that's how Windows works too since Vista.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa9...

And it's what enables effects like this in Windows 10:

https://docs.microsoft.com/en-us/windows/uwp/design/style/re...

Disclaimer: I work for Microsoft

I don't think what Windows provides is really comparable. By my understanding (and the documentation you linked seems to back this up) WDM is responsible for taking 2D framebuffers from applications, and compositing them into a (possibly 3D) scene. Fuchsia's Scenic operates uses a 3D scene graph as its input.
I always figured this was to support Material Design, where the size of a drop shadow depends on the difference in elevation between the surface casting the shadow and the surface underneath.[1] A Material Design compositor would have to know the position of each process' surfaces in 3D space in order to render shadows correctly.

[1]: https://material.io/guidelines/material-design/elevation-sha...

Microkernel, huh? At least now we will have a chance to get some empirical evidence to resolve the famous Torvalds - Tanenbaum debacle. It's going to be interesting to see how Fuchsia pans out and in what kind of environments it can be used.
You have to be kidding right? Microkernels have been used in production for decades in situations where safety, accuracy, and robustness are key. QNX is a microkernel used in real-time systems to great avail and great stability. Unlike linux, it's the sort of kernel you could really trust to run important infrastructure, like automobiles, unmanned aircraft, high speed trains, and robotic surgery.

Just because you don't consciously interact with them on a daily basis, does not mean they do not exist. My guess is that QNX and kernels like it are the reason you can take for granted such obvious things as your car braking correctly, your train not derailing, and your robot surgeon not crashing.

In today's world, we're so used to software breaking that if it doesn't break, we oftentimes think it must not exist. But, there is a whole world of reliable software out there that can actually be trusted. You don't hear about it often, because they work so well.

Well, one of the things I hope we get to see with projects like Fuchsia and Redox is what the performance difference is against a monolithic kernel like Linux, if/when they have been well optimized.
I don't think this will be a fair comparison, since most of Android's performance woes are at the feet of running on a JVM.
ART is a thing since Android 5.0 and it has become quite good.

Even the parts written in straight C and C++ code have issues in performance woes on Android, as everyone that has wanted to do real time audio on Android painfully knows.

The whole architecture has been a mess.

Speaking of performance issues and architecture messes, have you ever tried real time audio on Windows Phone? The absence of real time audio apps speaks volumes.
I was missing your blind Google advocacy and Microsoft hate.

Did they fired you?

If you had any Android developer experience, you would surely know that Google had a few failed attempts at real time audio, needed help from Samsung to implement them, and the final API was C only, with devs asking for a C++ one, wich was later dumped on github as side project and isn't part of the official NDK APIs, but alas you don't.

>If you had any Android developer experience, you would surely know that Google had a few failed attempts at real time audio, needed help from Samsung to implement them, and the final API was C only, with devs asking for a C++ one, wich was later dumped on github as side project and isn't part of the official NDK APIs, but alas you don't.

Would you mind to explain what happened completely? I am very curious about it.

Thank you so much ;)

Sure.

Originally Android only had the Java media APIs, with a quite complex state.

https://developer.android.com/reference/android/media/MediaP...

Android 2.3 introduced OpenSL ES into the NDK and Android 4.0 got OpenMAX.

All of them weren't up to the game of realtime audio due to the Android architecture.

http://superpowered.com/androidaudiopathlatency

https://nsr.cse.buffalo.edu/wp-content/uploads/2016/10/rtdro...

https://www.androidauthority.com/android-6-0-marshmallow-aud...

There are plenty of other articles online when you search for audio issues on Android.

There was even a Google IO 2013 talk about it.

https://www.youtube.com/watch?v=d3kfEeMZ65c

Meanwhile Samsung had customized their Android versions to properly support real time audio and offered an SDK for their handsets.

http://developer.samsung.com/galaxy/professional-audio

At Google IO 2016 the problem was again discussed, with the Samsung team from Professional Audio being called on stage to discuss their collaboration.

https://www.youtube.com/watch?v=F2ZDp-eNrh4

Finally last year at Google IO 2017, the new real time audio was announced, as C only lib.

https://www.youtube.com/watch?v=C0BPXZIvG-Q

https://developer.android.com/ndk/guides/audio/index.html

The announced C++ wrapper ended up being an external project on github, detached from the NDK, that you need to integrate yourself, without any guarantees how long Google will care to maintain it.

Oh, to make things even better, it is already clear from Android P draft documentation that new audio APIs are on their way.

>I was missing your blind Google advocacy and Microsoft hate. Did they fired you?

I'm just trying to correct all of the misinformation you like to post about Google and Android.

>If you had any Android developer experience, you would surely know that Google had a few failed attempts at real time audio, needed help from Samsung to implement them.

Unfortunately, your lack of Android development experience and your lack of exposure to development on Samsung devices has caused you to be disingenuous once again. Samsung didn't help Google nor did they contribute any of their code to AOSP. They implemented their own proprietary audio solution called SAPA. Unfortunately, it was limited to their platform and the audio latency wasn't very good in comparison to the iPhone.

>and the final API was C only with devs asking for a C++ one, wich was later dumped on github as side project and isn't part of the official NDK APIs, but alas you don't.

AAudio is indeed coded in C, but at least you can use the Oboe C++ wrapper. What were the low latency audio solutions for Windows phone again? Oh that's right, there weren't any. No wonder there were no low latency audio apps on that platform.

Dear Google Developer Advocate, my Android experience goes all the way back to Froyo.
Can you can link me to the Play store apps you've developed?
You can run native code on Fuchsia (and Android for that matter). It should be fairly trivial to do some benchmarks.
Not kidding, but granted, it would have been fair to say that we can now get more evidence. I knew about QNX, and Minix, Symbian and GNU Hurd are also microkernels.

It's just that despite all the good arguments for 30+ years, microkernels somehow seem to have failed to reach their full potential. That's why it's going to be interesting to see how Fuchsia pans out, being written from the scratch with all the cumulated knowledge and experience. Not to mention Google's resources and talent pool.

Like most monolithic kernels, most microkernels have failed.

Ultimately, kernel popularity is largely going to be a network effect. Linux is popular on servers because it is both free and popular; not really for any inherent technical merit. Windows is popular because no one loses their job for choosing Microsoft.

On the other hand, there are several microkernel operating systems with notable features and significant, dedicated fan bases. For example, AmigaOS is well-known for its responsiveness, and despite not being in production for decades, still has a dedicated fan base. QNX is used in a lot of critical, performance-oriented workflows. OS X is a partial microkernel as well.

Nevertheless, the only microkernel that has really failed is GNU/Hurd. Minix fulfilled what it set out to be (educational) and Symbian was successful enough on mobile.

Good points. Nevertheless, it's still puzzling why microkernels have done so poorly, despite them being superiour in theory. Almost all the ones mentioned here have waned into a curiosity or niche, and maybe also QNX starts to get a bit long in the tooth, having been released in 1982. OS X of course is another story, but also based on 1980's ideas with the Mach kernel. Which is why it's interesting to see another open-source contender to appear from a clean slate.

If I remember right, Linus's main argument against Tanenbaum was that the overall state gets so dispersed between the various services that make up a full-fledged OS, that eventually a microkernel-based system just gets unpredictable or starts performing poorly. I think the discussion was inconclusive, although for me Linus's argument sounded intuitively convincing.

If the argument here is that microkernels have failed because they are incredibly successful in two very important niches, then I feel like you are applying a double standard.

Ultimately, Linux also is not all that popular except in two niches: servers and cell phones.

Windows is also not popular except in a niche: desktop computing.

Ultimately, you have arbitrarily declared several very prevalent forms of computing to be 'niche', while declaring several equally prevalent forms to be 'popular'. One of my hypotheses above is that we tend to dismiss reliable forms of computing as 'not really computing', because we expect computers to fail. When computers work, we think of them as mechanical machines or devices (the way we might view eyeglasses for example). I feel like your subjective opinion of what is and isn't niche just further demonstrates this point.

My guess is that there are more instances of QNX (and systems like it) than we realize. There could easily be as many as Windows or OS X (almost certainly the latter, I feel).

That is not my argument, because I do not think microkernels have failed. Sorry, if it came out that way. I do not have a strong opinion one way or the other, just curious if there is something to what Linus said and more than meets the eye. As it still seems to me, that microkernels have not fared quite as well as could have been expected thirty years ago, when the ideas first crystallized.

You are totally right that microkernels have been very successful in many different areas. I am afraid to even mention, that to me it seems they are most often pretty specialized areas with targeted applications and hardware choices. Which is why I'll welcome Fuchsia, especially if it is meant to be a general purpose, open source OS for a wide area of applications running on commodity consumer-grade hardware. That's all.

Have they done so poorly? There aren't that many mainstream OSes, period, and there's not a lot of a space for a new OS. In embedded computing, various commercial sectors such as aerospace, and the military, there are highly successful microkernels most people don't know about -- QNX is the most well known example, but there are also others such as Integrity, and L4 and its many variants are heavily used in embedded settings. L4 runs on tons of small devices, including the iPhone, and is probably the most successful microkernel in existence. Not "niche" by any stretch.
> If I remember right, Linus's main argument against Tanenbaum was that the overall state gets so dispersed between the various services that make up a full-fledged OS, that eventually a microkernel-based system just gets unpredictable or starts performing poorly.

Well, large parts of the Linux world ended up with systemd, and I haven't yet met a person who had NOT had his fair share of issues with it.

> Microkernel, huh? At least now we will have a chance to get some empirical evidence to resolve the famous Torvalds - Tanenbaum debacle.

They're generally used for different purposes, but if you mean number of deployed systems, then microkernels have won hands down. Firmware in nearly every device runs a microkernel like L4. Hypervisors like VMWare and Xen are also microkernels.

Microkernels are everywhere, it's only the desktop that's still dominated by monoltihic kernels (Mac OS X's Xnu/Mach is not a microkernel).

Xen's more of an exokernel, and AFAIK ESX is monolithic.
According to wikipedia, Xen and ESX are both considered microkernels.
I mean, Xen is literally descended from exokernels. The whole point of an exokernel is to securely multiplex hardware with as few abstractions as possible (which makes for a pretty sweet hypervisor it turns out). It's original paravirtualized MMU is straight out of XOK and AEGIS.

VMWare calls their system a microkernel (and so Wiki's rules therefore repeat that without other research), but the stack trace on the ESX wiki page pretty clearly shows a network card driver being called inside kernel context, so they have to be playing fast and loose with the term. From the outside it looks like earlier Vxworks; it's somehow a microkernel despite all of the code living in the same address space with no real permissions differences because it has multiple kernel threads and loadable modules. By that definition Linux is a microkernel too.

> I mean, Xen is literally descended from exokernels. The whole point of an exokernel is to securely multiplex hardware with as few abstractions as possible

Xen has far too much in-kernel code to be considered an exokernel. Linux on L4 had even less overhead than paravirtualized Xen. If exokernels truly efficiently multiplex the hardware in the most minimal manner possible, this wouldn't be possible.

I can't comment on VMware beyond published documents since I'm not as familiar with it.

Exokernels aren't necessarily ascetic like a microkernel.

And Linux on which L4?

VMWare ESXi relies on a guest to provide drivers. Seeing a network stack in kernel context makes sense given that the process handling the driver is a VM. The VM used to be Linux. I recall them being sued because someone thought that violated the GPL.
They wrote a compatibility layer and run modified Linux drivers inside their hypervisor. That's separate from the Linux kernel that they use to boot and subsequently manage the hypervisor.
Look at OKL4 or Nova microhypervisor for what a microkernel version of Xen would look like. Xen is relatively large with pile of monolithic code in dom0. Microkernel vendors, esp OK Labs, were poking at its huge TCB for a while.
Thanks for reminding about NOVA! I had totally forgotten about it. Doesn't seem to have much activity since 2010 though, unfortunately. I wonder why Google does't just build on L4 or something like Nova instead of starting from scratch. These systems are low-level and general enough to do what they want, possibly better than they could achieve themselves. L4-sec has had 2 decades of research put into it, 3 decades if you count is predecessor L3.
I said same thing. I went further to say they shouldve bought OK Labs to get one of best combos of team and tech. It already worked with Android, too.

Far as NOVA, here's the dissertation that goes into a lot more detail on design considerations than most of the whitepapers.

https://www.researchgate.net/publication/275031217_Improving...

Of course, the number of hardware and firmware type of attacks on mainstream platforms made NSA retire the SKPP for doing separation on them. Even a perfect hypervisor cant be trusted to maintain that when its dependencies are garbage. That was even noted in 1992-1993 papers on VAX Secure VMM. Even secure digital desigms might have analog or RF attacks.

So, the current recommendation is to build things that way just to reduce number of attacks with monitoring and recovery as usual. Those two, though, could run on simpler, verified platforms. There's a lot of precedent for such split architectures.

The Linux kernel is the most successful kernel ever create and Andrew said it would never become anything as not a true micro kernel.

That is not enough emperical data?

Most successful kernel based on what exactly?
one point is rarely enough empirical data
Look up the Blackberry Playbook vs iPad comparison they did a while back. Playbook was QNX-based. They were browsing with some games running IIRC. There wasn't any lag on the switches. Being a RTOS, it stayed responsive.

The BeOS demo toward the end is similar where they fire up a load of 3D apps, videos, etc with the system gradually slowing but still handling the load. That was on mid-90's hardware.

EROS was a capability-secure microkernel with persistence for saving or restoring running state of system. One thing they liked doing at demos was unplugging it during file transfers. After it restarted, the system would pick up where it left off.

In security side, there's been a few security and separation kernels to never have a reported breach in the field. They passed 2-5 years of pentesting by evaluators, too, doing many times better than monolithic kernels in defects found. Also easier to mitigate covert channels or do formal verification since they're small enough to analyze to begin with.

One of those things is not like the others. BeOS did not have a microkernel.
All the reporting I've seen on it said it had a microkernel. I've included both the first thing from Google and my UNIX Alternatives List that has an in-depth link on BeOS.

https://arstechnica.com/information-technology/2008/02/first...

https://news.ycombinator.com/item?id=10957020

It also had the kind of compile-time slowdowns one expects with a lot of context switches on older CPU's. So, what's your source that there's not a microkernel at the center?

BeOS absolutely did not have a microkernel; all the hardware drivers, filesystem interfaces, and lowest-level network protocols ran in ring 0.
I appreciate you replying. Since it's you saying it, I'll stop saying it's a microkernel for now. I am curious why people said it so much. Maybe you could help there in even there was a sensible reason for the misinformation.

Did it have nothing of the sort? A microkernel-like component in center of monolith like NT? Microkernel architecture with key stuff in kernel mode for performance like hybrids do? Did you see anything fitting the term in any BeOS release? And how would you classify its architecture?

I'd classify the BeOS kernel as a modular-ish monolithic kernel. I'm a bit fuzzy on some of the more precise details, like the network stack (which they rewrote 3 or 4 times...) but I know that all drivers, at least, ran in ring 0.

Haiku's kernel is also monolithic, although we have a few hybrid tendencies (FUSE, but it's not widely used) and even more modularity than BeOS had, but we are still mostly source-compatible with the BeOS kernel.

I don't know why people say it's a microkernel; people say the same of Haiku, but it's just not the case. Perhaps it's because the dynamic kernel module system is built-in and virtually all kernel modules are stored as shared objects and loaded on startup, vs. Linux's more static approach, at least historically? That's not at all what's meant by the term "monolithic", but popular perception is often wrong...

Alright, that makes sense. I even suspected key drivers were in kernel mode given the performance on its kind of hardware. They might be saying it just because they don't know what a microkernel is. It might also be some new usage based on smaller, more-efficient kernels like used in containers. Who knows.
For what it is worth, there are more microprocessors running microkernels than are running monolithic kernels. The Intel ME is running Minix. Your cell phone’s baseband is likely running L4. QNX is used in cars. The Xen microkernels is used on AWS. VMWare ESXi is also a microkernels. The list goes on.

Linux is in places that have higher mindshare than the places that microkernels occupy. When was the last time you thought “I wonder how the hypervisor powering AWS is designed” or “I wonder how my cellphone’s baseband is designed”. The latter being a question that I wish people would ask.

As I can see, they use a microkernel architecture for the kernel[0]. I wonder why they need to create another microkernel OS and not re-use an existing one like MINIX 3 or QNX? What are the advantages of the Zircon Kernel compared to the MINIX 3 or QNX?

[0] https://fuchsia.googlesource.com/docs/+/master/the-book/#Zir...

it seems to be closer to NTOS (handles based) than UNIX (everything is a file).
Eh, the NT handle table and Unix file table are very nearly the same thing these days.

I'd say it's more like using the per process FD table for everything, rather than having global tables like for PIDs. Which is really cool, IMO. Containerization is all about adding indirection to the global tables, but of there are no global tables, you get all of that for free.

NT is weird beast from this point of view because of how much of process state (in the sense of "on unix this is some kernel structure") is in fact implemented purely in userspace.
Sure, I was just going on NT's system call boundary.
Linux is still about opening, reading, and writing to files, it tries to keep a common interface; it's all about read() and write(). Looking at fuchsia's system calls, it seems to have a different interface for each types of objects.
Linux calls into object specific ioctls and system calls to do anything interesting.
Turns out you actually can't just treat everything like a file because, oddly, not everything is actually a file.
Plan 9 makes a strong argument that you can, just Linux doesn't.
No, they really are not the same thing, not even nearly. You yourself mention one class of handles for which Unix has no equivalent. (FreeBSD process descriptors have some gotchas that make them significiantly different; and Linux procfs descriptors do not match behaviours when it comes to the object lifetimes and handle waitability.)
Both Minix and QNX are handle based microkernels. Probably only one "everything is a file" "microkernel" is Plan9/Inferno, which is generally not considered a microkernel.
QNX is owned by Blackberry.
Minix3 -> NiH QNX -> Proprietary

They should have used seL4.

I can't wait for this to be a huge bloated system that nobody comprehends in its entirety. Oh, wait
What do they mean by "capability based"?

A lot of people say "capability based" and really mean some very fine grained access control system. (A confusion encouraged by POSIX "capabilities".) What I hope that they mean is the one that solves the https://en.wikipedia.org/wiki/Confused_deputy_problem

There are two VERY different meanings of the phrase. The one that I'm hoping for can be thought of like this.

Sounds like the real deal: https://www.linkedin.com/pulse/capabilities-os-security-goog... (I think this article made a small error in that an open-source KeyKOS release exists now, I think only for obsolete hardware.)

OTOH the OP's table of contents gives me the impression that Fuchsia is more complex than the older capability OSes (KeyKOS family, seL4).

Somewhat tangential to the topic but one really cool project related to Fuchsia is the Xi text editor project written in Rust.

The author (Raph Levine) has a very interesting series of posts on data structures and algorithms used in the editor (like rope data structures)

https://github.com/google/xi-editor/

Well, "GNU is Not Unix" and that worked out OK. On the page it says it is "POSIX lite", so it likely be recognized a rather Unix-like, and and a number of things may likely end being able to be compiled on it with few modifications due to the POSIX-like environment. The `brew` project on macOS would be a related example.
There seems to be system calls to create and manage Virtual CPUs.

What is this for? Is there a precedent?

Backwards compatibility with Android?
Fuchsia would be pretty cool, if it wasn't being developed by Google.

Not gonna use an OS from that company.

It's interesting that Google even registered fuchsia.com, used in examples.
I really don't get this coming up with a new OS's thing every now and then.

As I see it, is all about driver support; just because is the bigger effort. That is why vendors (and the community) focus in only one or two options (Windows/Linux).

Anybody can come up with new fancy OSs, as a matter of fact many people does. Problem is, there is no incentive for vendors to produce specific drivers for those, and the communities are just to small to cope with the huge amount of hardware support to make them useful.

I just don't see the point of coming up with new OSs as long as Windows/Linux just work as intended.

Just because you don't see it doesn't mean its not a good idea.
It's not clear where exactly Google intends Fuchsia to run, but wide hardware support would be best for a relatively open ecosystem like PC hardware. A non-general-purpose OS, or at least one designed to run on specific hardware, doesn't have the same requirement for a large body of drivers to be available. Imagine if they want it as an OS for a range of embedded devices, or something. Hardware support could be very limited. Especially at a smaller scale like that, Google's got the money and expertise to license hardware IP from another company and build their own drivers for it.
A network host/container OS that is lighter than Linux/Docker, Solaris and FreeBSD.
One can dream ;).

I do like the minimization that a lot of OS/Systems are undergoing though. I still remember when VMWare VM's came along and my mind was blown. Similar feeling on seeing Docker, but it was tempered somewhat until kubernetes came out. Very excited to see what comes next in the future.

I see a lot of negative comments about this project here. Let me just say that: it doesn't need to be a POSIX compliant system, doesn't need to be user friendly or even provide something different from what can already be done with Linux or other OS's that we have today.

Google spends a lot of money on research. One thing about research is that a lot of stuff you do ends up completely useless in the short term even if you cover all your bases initially. Even if this project fails, I hope something good can be learned from why it failed; maybe someone in the future can learn from those mistakes and try again.

I'm certainly no fan of Google nor of the way they make money. But I am very happy they use that money for stuff like this.

Hacker News commenters are not the ones making baseless claims about how their product is better than the current market dominator. Hitchens Razor is working just fine in these comments.

It reminds me of NFL fans. No one talks trash about the crappy quarterbacks of their opponents teams. Everyone talks trash about Tom Brady, and Peyton Manning, Cam Newton, etc.

This is also a general negotiating tactic. Start with a bold initial offer, and then negotiate back to what you wanted in the first place.

> Hacker News commenters are not the ones making baseless claims about how their product is better than the current market dominator.

Where did anyone say that Fuchsia was better than Linux?

The title of this document, "Fuchsia is not Linux", is a play on the "GNU's not Unix" backronym for the GNU project, as well as being a way of pointing out that unlike Android, Fuchsia is an entirely different kernel.

I mean, obviously they would write it because they thought it would be better for certain applications than Linux, or better for trying out new ideas, or the like, but I don't see anything claiming that Fuchsia is better.

In fact, Fuchsia has been done as a pretty low-key project for a while, slowly opening up parts but without much fanfare, just repositories being available, and slowly posting more documentation like the link in the OP. I don't really see very much marketing about it, just low key releases of code and more technical information to give people a taste and show the direction they're trying to go in.

It seems reasonable to want to build a modern OS from scratch; Linux has survived and adapted remarkably well, but it has many aspects that are rooted in the past and just can't be shaken off. The world has changed a lot. I just hope Fuchsia remains truly open-source and doesn't become a power-play by Google.
Soo, given that all important device drivers in the Linux kernel used in Android are closed, I'd be curious to hear from Google if their new Fuchsia is going to solve that problem.

This may seem trivial, but closed device drivers make 100% impossible neither to update them to more modern versions once the Android version is declared obsolete, nor install natively a different operating system on the device. This practice, security concerns aside, is responsible for a huge load of old -otherwise perfectly usable- devices being scrapped in landfills.

So, dear Google, will you keep the lowest, smallest but most important layers of the OS open or rather will prevent people to do what they want with the devices they purchased even at the cost of contributing to more pollution?

Google does not regard closed drivers as a problem. With Fuchsia, all the important drivers will be closed, full stop. Google has no incentive to care about your landfills. The permissive license of Fuchsia will make its ecosystem more appealing to IVI and mobile OEMs, not less.
E-waste is just one of the problems, probably the only one most users could understand; but security is also a huge one. With apps requiring permission to essentially everything (and users surrendering them blindly) security on any mobile device as of today is a myth. Open Source apps could mitigate the problem by swapping an unreliable layer with a trustworthy one, but we still have closed device drivers which could contain whatever their manufacturer (or its government) wants without any chance of being audited.
My understanding is that Fuchsia will have a stable ABI to avoid the driver issues of Android/Linux. That's not an answer to open source drivers of course. That falls on the OEMs.
I also don't approve of the wasteful short lifecycles, however I don't think they are only caused by device drivers being closed source. People want to buy new devices, not only because of the outdated software, but also because the hardware has improved so much in the last years, and because they enjoy buying.
That is absolutely true, especially in "western" richer countries, but don't forget other poorer places where most people don't feel the need to get the latest gimmick to climb the social ladder by impressing friends, but rather to communicate in the cheapest possible way.
If the device drivers are stuffed into user space using stable ABIs, it would be easy to update the OS while leaving the driver alone. That can even be done with kernel drivers. I believe that Windows does it. The reason that cannot be done on Linux is that Linux elected not to have a stable driver ABI.
I'm not familiar with driver development, but could it be possible to rewrite a driver's machine code so that all interactions with the kernel are redirected through a translation layer that emulates the old kernel's ABI using the new kernel?
"Senator, while I agree in the general sense that Fuchsia is not Linux, It appears that in this specific case, its just Yet Another Linux."

How is this not the latest iteration of not invented here syndrome? Any system like Linux or Python that has the "Benevolent Dictator For Life" holding the reins is inherently saying that they favor quality over quantity. Its almost like the US Senate, in that the very goal is to go only as fast as prudent.

Looks like they are using Dart for developing applications. This seems to be the dart sdk for fuchsia

https://fuchsia.googlesource.com/topaz/+/master

There is no documentation at all but there is a few application examples in /app/. The bindings for fuchsia and zircon (kernel) are in /public/dart-pkg/

AFAIK there is Rust and Swift support in OS but seems like high level UI is done with Flutter for the time being.
I have yet to see anything useful come from Fuchsia. There are tons of 'press release' type blogs, but nothing functional. The bundled steps to run Fuchsia inside qemu didn't work (and even shipped their own version of qemu in the scripts!)

I'm assuming the Fuchsia development is 100% about not having to use any GPL software. Look how hobbled the Android and ChromiumOS communities are compared to the Linux world at large.

As soon as someone outside of Google produces anything of any novelty around Fuchsia, I might change my mind, but for now I'm viewing it as a going-nowhere software project that's all hype and will never be 100% Free and Open Source.

> I'm assuming the Fuchsia development is 100% about not having to use any GPL software.

This. Everyone wants to distance themselves from the GPL. The reality is that the ideas the 90s open source movements were founded on are far from what we see today. We don't see OSS end user applications; at least not a lot in mainstream use. Instead, we just see OSS middleware.

In the early 2000s, people though one day we'd see Gimp be on par with Photoshop and StarOffice/Libreoffice take on Word and Excel. We've come a long way, but those ideas were never realized.

And by everyone you mean Google and other corporations, that explicitly disallow software with restrictive licenses, because opening up their own software, giving up lock in and actually competing is unthinkable to them. So not really about distancing themselves or the movement. Individual developers and small companies, on the other hand, can benefit from the most restrictive GPL licenses by selling commercial licenses to those corporations and not giving it away for free to them.
>>> the ideas the 90s open source movements were founded on are far from what we see today

Are they ? GPL is about protecting users' freedom. It's still a valid aim to me, probably even more so.

What has changed is that the web is much bigger than the desktop and so the GPL has less ground to grow on, so its effect may have been weakened. But only the effect, not the goal.

(I 100% admit I am more an idealist than a pragmatic)

By users' freedom you don't mean users who own patents, since they stand to lose their property under GPL restrictions. (Google Implied Patent Grant if that doesn't ring a bell.)

So most important corporations, etc. Copyleft was a very clever idea; but deciding to go to war against all intellectual property was a step too far. Immense billions have been spent already replacing GPL software with truly free software under a freer, more liberal license.

The software companies learned that they could benefit from open-source and collaboration on the infrastructural blocks and they eventually embraced it, which led to an increasing number of open-source project. But they don't like the GPL, which is a political instrument created by the Free software activists.

But those activists still exist, and their code is still written in GPL to avoid being “weaponized” by big corporations. The main difference is that they don't need to write all the tools they need on their own, since private corporations now release open-source code. And because of that, it's easier than ever to run with almost 100% free software on your desktop.

These people never _thought_ “StarOffice/Libreoffice take on Word and Excel”, they _wished_ there would be a political movement that make it happen, like socialists wish the Revolution occurs. And in the 90ies − early 2000s it really looked impossible, because the technical challenge was too big: everything had to be built from scratch to compete with a relentless private industry that kept moving forward: even the _programming language_ and the build tools were proprietary. RMS wanted to write a free printer driver, and first he had to the whole GNU stuff, with GCC and Emacs!

If you look where we are now, you can see it's way better ;).

ChromiumOS is a Gentoo fork. Speaking of which, I am a Gentoo developer and I like what the ChromiumOS team has accomplished. It serves a practical need. My neighbor uses it.

If Google wanted to avoid GPL software, they could have used a BSD UNIX successor. It certainly would have been far easier to do.

> I'm assuming the Fuchsia development is 100% about not having to use any GPL software

And for that reason, as an end-user, I’d be extremely weary of buying any Fuchia-based device.

You can be 100% assured the source for the required HW-drivers to use the device for anything else wont be available.

I agree. We're marching towards less open, not more open.
Why use a new OS from a company with historically bad customer support, will likely report everything you do back to google HQ for analytics and frequently abandons projects once developers get tired of it. Sounds like a computing nightmare, I'd be very hesitant to voluntarily use it.
And yet, Android is the single most used operating system in the world and Chrome is the single most used browser...
That's why I said voluntarily. Realistically there are 2 cell phone OS's to choose from, Android and iOS. Android is broken a lot of the time and people are forced to either find workarounds or do without functionality. I dont use Chrome but Firefox. But the masses will use it if its forced on them.
>Android is broken a lot of the time and people are forced to either find workarounds or do without functionality

Continuing to see this parroted is about as silly as the "Android OS includes ads" which is another comment that lets me know the author hasn't actually used the platform for themselves.

Im speaking from personal experience. From not being able to write to the SD card with updates to the Gmail Outlook/Exchange Sync being broken in Oreo, to gmail messages being delivered hours or days late due to doze and GCM messaging. It's not parroting when its true.
Allowing Google to stalk even more people and legitimize the world's largest surveillance operation. Not a good thing.
I don't have a problem with Google's resources to build something of that magnitude successfully. My problem is with their execution. All their products are in perpetual beta. And the users are forever testers. That's their business model, and it doesn't call for great UI/UX.
That was Windows 95 and most Microsoft software.

It's pretty much the norm today for everyone.

Search is beta? Google WiFi? Gmail? Android? YouTube? Chromecast? Project zero? Maps? Photos?
GMail was in beta for a long time. Search is not a product but a service. Maps was in beta for long as well.
> GMail was in beta for a long time.

Which doesn't justify the universal, present-tense claim upthread.