Fuchsia: a new operating system
lwn.net
lwn.net
They are using the IPC system developed in and extracted from Chrome. They are drawing everything in userspace with fast graphics render but the logic for all system components written in Dart from the Flutter project. They use musl for the libc. They are using the little kernel for the core kernel.
As a long time Linux desktop user myself, I'm really excited about this project. A secure desktop without tons of system calls? Userspace graphics? Not HTML/JS based? But could still be used for development? Yes Please!
It's really easy to compile and get it running. Try it out!
You can use Flutter today to write an app that runs on iOS and Android. :)
On one hand, the website says that it's compiled to native code (so it can be same speed/faster than Java), but on the other hand, it's based on a soft-type language, which makes optimization difficult (even with V8, JS is still slower than native code).
Side question:
I understand that Dart was soft-typed because it was supposed to replace/compile to JS, but what advantage does soft-types have against "implied-types" (like auto or go's := ) combined with operator overloading (to allow string+int, for example)?
Recently Dart has added a strong mode (https://github.com/dart-archive/dev_compiler/blob/master/STR..., http://news.dartlang.org/2017/01/sound-dart-and-strong-mode....).
One of the reasons for strong mode is to enable better optimizations (https://www.dartlang.org/guides/language/sound-faq#why-stron...).
When JS performance threads come up I always mention that JS will never be as fast as Go/Java. Some people have a tantrum when I explain these issues. The sources I usually cite are dense and people just continue to downvote without reading them.
I think it's a work in progress, but main benefit at least at the time was faster startup.
Unlike the script snapshots, application snapshots also include CPU-specific native code in addition to the serialized token stream of the source code.
So, you don't just skip the parsing stage, you also skip the warmup phase. Your application starts instantly and it runs at full speed from the get-go.
I didn't find a doc on how low level is this framework going. Or to put it differently , where does it plug itself on the iOS stack ? opengl ? calayer ? uiview ? webview ? etc...
It's fairly low level. It uses Skia, which is a 2d rendering engine Google bought 12 years ago that powers Google Chome / ChromeOS, Android, Firefox and Firefox OS. Skia is built on top of OpenGL, but they've been working on a Vulkan backend that is close to feature parity.
This seems to be how they get the high performance animations. It also explains how they are able to do cross compatibility between devices (You really only need C++ and OpenGL).
Here's more info from their FAQ: https://flutter.io/faq/#what-technology-is-flutter-built-wit...
https://events.google.com/io/schedule/?sid=fed907cf-4b51-433...
https://events.google.com/io/schedule/?sid=496d01fb-2139-4fd...
Disclaimer: I'm in one of the talks.
Dumb question, does this mean that it's limited to software rendering only? You need to go through the kernel to talk to the GPU, right?
Then there's the whole "GPL mafia" in the Linux world who'd like to force vendors to open up their drivers by moving as much of the critical pieces to the kernel as possible. In theory, you cannot write a kernel driver without violating the GPL. Fuchsia will have no such impositions. If someone wants to open their driver up, they could. If they believe their offering is superior, and a secret sauce needs protecting, they can keep it closed
Sure, it is, for lots of people. Even, apparently, the FSF, hence the reason non-consumer products are not subject to anti-tivoization rules in GPLv3.
Some businesses feel threatened by some open source licenses and other businesses are using the same open source licenses to do the threatening.
The funding for many important open source projects comes from global corporations that use it as part of their strategy, sometimes dominating entire industries based on open source.
A large number of small consulting businesses are based entirely on open source software as well.
Open source is not meant to be anti-commercial, nor would that make any sense, because "commercial" is what most of us do to make a living. That is not what takes away anyone's freedoms.
What does take away many freedoms is the fact that none of the widely used open source licenses fulfill their original purpose.
Linking rights to distribution once meant that users of the software got those rights. Now, in the age of the data center, end users get no rights at all and software can be modified freely by those who run the data centers without granting anyone access to those modifications.
Software has become more opaque than it has ever been before since the dawn of the PC age. Even without access to source code we had more control over Microsoft Excel than we now have over anything that runs in a data center, regardless of whether it is nominally "open source" or not.
Both the PS4 and the Nintendo Switch run on FreeBSD, by the way.
Not exactly from what I've read, the PS4 runs 'Orbis OS' which is based upon FreeBSD 9, meanwhile the Nintendo Switch is using the network stack from FreeBSD, but also stuff from Android and the custom OS they wrote for 3DS.
Do you see many vendors being forced into change?
For non-GPUs, only some WiFi drivers are out-of-tree (Realtek and Broadcom).
AMDGPU is already very usable. I remember ~5-10 years of waiting to use my Radeon 9600 with a recent kernel until the free Radeon driver was finally up to snuff. Catalyst and fglrx were awful.
Proprietary drivers just don't make sense. They are practically unmaintainable.
That's sort of the whole point behind Mantle/Vulkan/Metal/DX12.
In the cases where it does, I imagine it's a situation where you're actually doing 3D-accelerated renders of the user interface. In which case, when the graphics subsystem craps out, hasn't your running system been rendered effectively unusable anyway?
I get that this is a nice idea in theory, but does it actually improve anything practical in practice?
If not, how exactly do you plan to restart the graphics process?
ssh from my phone and restart the driver.
Go to a fallback ui, and restart the driver.
Have a system util notice the driver is misbehaving incorrectly, and restart it.
Are there concerns on non-dedicated graphics cards, or running say an ARM-based processor.
Also I'm not sure what you mean by '...easy to compile...' How do you compile this? I'll have to read up on it. Get that checksum bruh.
I remember trying to use Slackware and for me that was a lot of work.
Edit: Oh I see at this time it is limited to three physical machines. Interesting on the Pi 3 part. I wonder if I could try it in Virtual box. But why try it in the first place?
Compare using VS Code w/ Typescript Language Service to any type of dev stack that includes the word “Scala.”
Open VS Code and then Sublime and be amazed.
Atom and VS Code can never be 'easy on the memory' because they have to load an entire Electron instance just to idle.
At what? Using 5% more total resources? Great tradeoff!
I have significant experience with all big Java IDEs, 3 months full time with Visual Studio (in addition to testing it on and off for years). Use Sublime regularily. Can use vim productivily for server config. Have used emacs enough to get a taste of it.
But lately I find myself getting back to NetBeans whenever possible, not because of price but because of features, sensible defaults and stability.
OTOH, my hobby programming is done on an HP Mini 101.
It's easy to use, but it's not easy to learn.
(I personally alternate between both Kate and Vim, depending on whether I'm in more of a GUI or a CLI mood)
Moore's Law. Give it another decade and it'll be Etacs.
Building user land OS's is a fascinating (if not new) idea that I really love to tinker with a myself. It really would be nice if they can pull it off.
Read through what I could find of the IPC code a while back. Currently it seems workable but a bit "baroque", then again if, as you say, it is working inside Chrome, I guess it is battle tested.
Messaging has always and still is the future for very loosely coupled systems, and driving it all the way down would be really great.
Been following this for a while and can't wait to give it a whirl. Plus everyone likes to root for shiny new OS design projects.
> They aren't writing a new OS,
> at least, not in the complete sense.
Neither was Linux. It was based on Unix.Neither was Unix. "The success of UNIX lies not so much in new inventions but rather in the full exploitation of a carefully selected set of fertile ideas . . . " --- Dennis M. Ritchie and Ken Thompson, "The UNIX TimeSharing System"
OR it could be a UEFI experiment...
"This project contains some experiments in software that runs on UEFI firmware for the purpose of exploring UEFI development and bootloader development." -https://github.com/fuchsia-mirror/magenta/blob/master/bootlo...
Hopefully, when we start ripping out *nix before 2038, Fuscia and other capability-based OS's can take over.
(This book is well worth reading...)
On modern OSes, that aren't plain UNIX clones, C and C++ are being pushed down the stack just to provide some hardware abstraction layer, with everything else being done in more safer, productive, languages.
Side-tangent, but security enthusiasts need to calm down on the "world is ending" talk. Those of us who lived through Windows ME, where logging on IRC basically gave you a 25% chance of having your computer hijacked by some random script kiddie, think it's laughable to say that security is anywhere near as bad as it used to be. Night and day.
At the very least you should be able to stay secure if you know what you are doing. But even that’s not enough. You also need to be lucky && uninteresting && not actually using computers.
Many of these devices aren't patched after they're sold, and can be compromised within minutes of being assigned a publicly routable IP - this is what happened with Mirai.
Security is better for desktop computers, but if you include everything with an operating system, it's much, much worse.
Those were people just messing around. Annoying and harmful to your local machine certainly, but the harm that was caused was localized.
Security vulnerabilities are now industrialized, with large-scale public attacks and widespread silent compromises used to gather and sell your information for profit. The situation is still bad, it's just bad in a different way.
But there are zillions more computers, doing more things, with more interconnections than ever before. So the problems are compounded and I think the situation is worse overall.
Unfortunately, that only holds if you take the view that IoT appliance != computer.
Because let's be honest - those things are dangerous to general network hygiene and wellbeing.
It's both inspiring and depressing.
Then, people might quite reinventing the wheel or missing obvious things as much as they do now.
No one uses them. Security is useless if no one uses it. Capabilities are too hard, too complex, to manage.
Great idea. Horrible implementation.
https://nuxi.nl/ https://www.bsdcan.org/2015/schedule/attachments/330_2015-06...
Capabilities. Like fine grain locks, these are very powerful and very hard to get right. That's the lesson from Hydra, the 432, .... No, it's not a hard mechanism for the microkernel to get right; it's a hard policy for the application programmer to get right. However, that's probably more of an opportunity rather than meant as a criticism. Our tools are massively more evolved than they were in the 70s. It'll be interesting to see what happens with capabilities.
C++. Oh lord. Why are you writing a microkernel in C++? If there was anything they learned from L4 (Xen, Linux, ...) it is that C is sufficient. Why do you want to implement something small with something that is large? This one is a real head scratcher.
Provably secure. They did this with the SEL4 microkernel so this is a doable thing. If they're going to hang their hat on security (capabilities, microkernel, ...) there's no excuse for not having done this already and delivered a provably secure microkernel out of the box.
Because if there was anything proven from years and years of using C, it's that it is woefully insecure and should not be trusted to write a kernel with.
You can still fuck up with C++, sure, but std::shared_ptr offers more guarantees than *.
EDIT: HN stop eating my stars
seL4, a third-generation microkernel is 8,700 lines of C code and 600 lines of assembler.
http://web1.cs.columbia.edu/~junfeng/09fa-e6998/papers/sel4....
So we also empirically know that you can formally verify a microkernel written in C. Now if the Fuchsia folks had gone ahead and formally verified their microkernel, this issue would be moot. But they haven't. So we are instead left with std::shared_ptr offers more guarantees than *. While this isn't nothing, it isn't much either.
Good coding practices take no time to implement, you learn it once and you write that way. It is not bullet proof, neither are capabilities. Still, at least they're practical.
http://www.ldra.com/en/software-quality-test-tools/group/by-...
Embedded, real-time Java could also be on the list since Java ecosystem has a verification tool for about everything. CompSci loves Java for some reason (probably mandated classes). Yet, verifiable C and SPARK are closer to the metal than embedded Java plus no Oracle risk. So, left off Java as well.
On the Java side you can probably check what Aonix used to do, they are now part of PTC.
http://www.ptc.com/developer-tools/perc
Also there are the guys from MicroEJ.
http://www.microej.com/products/device-software-development/...
There is no Oracle risk with Java, when companies play by the rules.
PTC, Aicas, IBM, MicroEJ, Excelcior JET, HP, Cisco, Ricoh, Azul, Red Hat and so many other companies are selling JDKs with their own set of features, without having had any issue with Sun or Oracle.
Only Google has an issue with Oracle, because they decided they were the cool kid better than anyone else whose rules don't apply to.
It's true that seL4 is not a magic safety or security bullet; in particular, their FAQ says that they haven't completed extending their proofs to DMA safety via VT-d or SystemMMU on ARM, so DMA-accessing services would have to be separately verified. And its particular feature set may not be appropriate for all situations. But if its API does work for you, it would be foolish not to at least consider using it.
It is really unreasonable to dismiss seL4 simply because it took them a lot of effort to create it. That effort is now done and can be re-used and magnified by further effort.
Compared to the midnight bamboo forest my company built. A challenging codebase, not by its merits but because you need to be clever just to find your way through.
Anyone know if Google is hiring webforms developers?
Why do you want to implement something small with
something that is large?
Consider the size and amount of equipment involved in making watches. Or microchips, for that matter.As far as I know, Google hasn't telegraphed the purpose of it. I can't tell if it's targeted at all, none, or some of the above.
https://techspecs.blog/blog/2017/2/14/googles-not-so-secret-...
https://fuchsia.googlesource.com/magenta/+show/master/docs/m...
There's no need to kill Chrome OS for the education, mind.
The team has stated that everything in the kernel is true, and that there's quite a lot there to infer from. What they can't say publicly is the how and why, e.g. how would they hypothetically implement backwards compatibility with Android apps?
Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called “Fuchsia”, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project. There really is a Fuchsia, and these people are using it, but it is just a part of the system they use.
In fact, it looks a lot like the same general design as Integrity, a microkernel capability-based architecture with as much as possible in user space.
I didn't realize that he was working for Google.
This doesn't seem like a wise path to take.
* See http://sel4.systems/
I can see potential problems already from looking at the Magenta kernel docs. For instance, they say that all syscalls are non-blocking except for explicit wait and sleep calls, which means the kernel is very likely vulnerable to various DoS attacks, which aren't a problem for L4 kernels.
Things changed in hardware in last 20 years and maybe we've learned something about software as well.
Not to mention that sel4 is GPLv2, which is kind of problematic for a commercial company.
In the end, the micro-kernel is a very small part of the whole stack.
...but your parent, in turn, has limited permissions, because the only way it can get a handle is to ask its parent. And when you ask your parent for a filesystem handle, your parent doesn't have to give you the handle it has. Your parent might give you a limited filesystem handle which only allows writes to /tmp.
...and when you, in turn, start a subprocess --- say, an instance of sqlite for use as a database --- you have to give it handles for the things it wants to do on your behalf. But your filesystem handle only allows writes to /tmp. That means that your sqlite instance can only write to /tmp too.
There's more to it than that, because in real life you also want to forward capabilities to other running services as part of RPCs, but you tend to end up with a natural container system with multiple redundant layers of isolation, all running at minimum necessary privilege, and all hardware-mediated.
Another really interesting capability-based OS is Genode:
https://genode.org/about/screenshots
https://genode.org/documentation/general-overview/index
It'll allow you to run complete OS kernels as capability-restricted Genode processes, effectively allowing virtual machines as first-class citizens.
Thanks for this explanation, it really helped the idea "click"
Most such languages only go too far by allowing "ambient authority", whereby any component in your program has the ability to turn a reference to a value that carries little authority, into one that carries significantly more authority. For instance, consider the file open API: you're essentially turning a string, which exposes no unsafe or security-critical methods, into an object that can literally destroy your computer. And literally any library or component you use can open files. It's madness!
To make a memory safe language capability secure, you simply remove all sources of ambient authority. This mainly consists of globals that permits transitive access to mutable state, like file system APIs, global static variables that can reference transitively mutable data, etc.
These insecure APIs are then replaced with equivalent object instances which you can pass around, eg. you can only receive the authority to open a file if you're given an instance to the directory object which contains that file. The entry point of your program would then change to accept various capabilities instead of just string parameters.
Of course, you can always have a bug in your APIs that allows an attack or bug to propagate. But that was always the case even without capability-safety. Capabilities can't give you everything for free. :)
Except private methods, right? That's where I feel that this analogy breaks down
Isn't this more or less what Sun tried to do with Java applets, which in practice turned out not to be so simple while providing a rich API?
I'm not familiar with the Java applet model specifically, but Java's general security model is based on stack inspection, which is nothing like capabilities.
http://www4.cs.fau.de/Projects/JX/
Note: JX takes a different route but shows POLA can be done simply and performant.
http://www.cl.cam.ac.uk/research/security/ctsrd/cheri.html
https://en.wikipedia.org/wiki/EROS_(microkernel)
Note: Definitely see KeyKOS as it was commercially deployed with both POLA and persistence of app data.
https://www.combex.com/tech/darpaBrowser.html
http://www.cs.washington.edu/homes/levy/capabook/index.html
Note: Especially see System/38 which became AS/400 & IBM i. Still selling. And they run and run and run. Architecture & POLA go a long way there.
I thought they were just a bit like file-descriptors or X11 window ids, or indeed pointers. Such handles do have a kind of role in authorization: once a process has convinced the system to give it some resource, then the (handle, processid) pair is all the system needs to check access.
However you typically gain the handle through something like `open()`, i.e. an ACLed request for a named resource. But with true capabilities you just inherit authorisation from some other capability -- possibly one granted to you by a different process.
That said, the difference from existing systems might be small. Namespaces are really useful, and are probably here to stay. But as long as things can be accessed by names, the access will need to be controlled by something like an ACL.
Not necessarily. If your system supports first-class namespaces, then you can just build a namespace consisting of only the objects to which a program should have access. No need for any further access control.
A file open dialog from a program is simply the program's request for you to map a file into its namespace.
Unfortunately this is usually quite heavyweight. In Unix-like systems, and in Plan 9, the canonical way to do this is to implement a filesystem. "Filesystem" is the universal IPC layer. But implementing a filesystem usually takes quite a lot of effort.
Do you know of any systems where this can be done easily enough for it to be used ubiquitously?
One would much prefer to just put together a hierarchy of objects at the language level and automatically expose it... or something like that anyway.
It needn't be. A file system is just a set of nested hashtables. The complexity of traditional file systems comes from the durable representation, but that isn't necessarily needed for first-class namespaces. You can just serialize and deserialize a namespace as needed on top of an ordinary file system.
> Do you know of any systems where this can be done easily enough for it to be used ubiquitously?
Plan 9 obviously. The Plash capability secure shell [1]. There are probably a couple of others, but not too many overall.
Plash uses capabilities aggressively and only gives subprocesses access to what they need to access. But it doesn't make it any easier to write new applications which construct namespaces and proxy access.
On the other hand, I can see how capabilities would mix with ACLed namespaces to improve security. Essentially it would define the semantics of things like cgroups and chroot jails.
In fact sometimes I think that mainstream virtualisation is slowly reinventing -- in an incremental way -- what various alternative OSes advocated in a radical way. E.g. Linux cgroups and "one process per container" sounds quite a lot like Plan9's per-process view of the system.
First-class namespaces are an implmentation of capabilities. You wouldn't necessarily need capabilities on top of that. You'd pass around namespaces or perform namespace mappings to grant or revoke authorities.
> On the other hand, I can see how capabilities would mix with ACLed namespaces to improve security.
You can use ACLs to implement capabilities [1], which the capability folks did with Windows XP as a proof of concept with a modern OS [2] (I don't know why Microsoft didn't just adopt Polaris to be frank). But in general you shouldn't use ACLs to try augment capabilities. They restrict the class of expressible security policies without actually adding security (and in fact, they introduce insecurity).
[1] http://www.webstart.com/jed/papers/Managing-Domains/
[2] http://www.hpl.hp.com/techreports/2004/HPL-2004-221.html
https://fuchsia.googlesource.com/magenta/+/master/docs/sysca...
It's early days. The API surface is still evolving.
https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_deb...
The article says that the focus is on 'PCs, tablets, and high-end phones'. Wouldn't a more secure OS be relevant to server environment? Is the performance cost of a microkernel considered to be too high for a server OS? Is it too difficult to do?
The majority of embedded OSes have a microkernel design.
Also Windows and OS X have a kind of hybrid design, even if not a proper mikrokernel.
On Windows case,there are now a sandboxed kernel and drivers.
https://channel9.msdn.com/events/Ignite/2016/BRK4010
https://channel9.msdn.com/Blogs/windowsserver/Device-Guard-i...
If anything, the closest thing to a microkernel that is in wide use is Xen, or Hyper-V.
In any case it is better than Linux will ever be.
Regarding Xen and Hyper-V, there is a systems paper that states hypervisors are the revenge of mikrokernels.
The point of the paper is that an hypervisor behaves just like a mikrokernel, with guest systems running exactly the same way as applications would do on a mikrokernel OS.
But yes, I was thinking exactly of that paper when I mentioned hypervisors. It only applies to type 1 hypervisors though: not KVM, Beehyve, or OpenBSD vmm. Even VMware ESX is more of a hybrid kernel.
Regarding hyperviors, actually I think only type 1 hypervisors make sense.
The type 2 were just a workound due to lack of hardware support.
So, I'd say evidence leans in favor of microkernels being better. The cutting-edge isn't that, though. It's hardware/software combinations that give more reliability and security with better usability & performance than microkernels. Lots of work in languages, compilers, and CPU extensions. CHERI and CHERIBSD is probably top example with Spin OS, JX OS or Redox OS on something like Watchdog-Lite CPU being representative of language-oriented work.
Plan 9 is not dead, it ideas live on in other projects.
I may be mistaken,but my understanding is that userspace servers accessible through the use of the fopen/fread/fwrite, etc. system calls was an idea that originated in Plan 9.
Furthermore, some people who worked at Bell Labs at the time now work at Google.
http://multicians.org/rjf.html
Now, the question is when was same concept applied to user-space servers? It was possibly Mach that was UNIX-like with all processes communicating through ports that were like standardized pipes.
https://en.wikipedia.org/wiki/Mach_(kernel)
You got user-space components to open them, read them, write them, etc. That was 1985 whereas Plan 9 hit universities in 1992. Both models had security and performance issues that led reliability- and security-oriented OS's to go different routes on purpose. Plan 9 was a step up from UNIX but a step down from high-assurance (eg KeyKOS, NonStop) and high-flexibility systems (eg SPIN OS, LISP machines).
In general: it gives a process a huge amount of flexibility in terms of how it sets up its own address space, communicates with other processes, and in how it can communicate with the kernel.
Hasn't this always been the way Android operates? Developed in secret, source thrown over the wall every release?
https://fuchsia.googlesource.com/docs/+/master/getting_start...
This makes it significantly easier to build a closed platform with unbreakable barriers between processes, and this is a great thing in terms of security and fine grained access controls for each process. Individual process isolation is extremely important for most of todays use cases where only a single user is logged into each system at one time and most running code is trusted.
In practice this means you can prevent user space processes from accessing anything you don't want them to touch while still giving them substantial low level access. This will be a boon with device makers because it allows them to preventing a users apps from compromising the carrier experience. Companies like Google will also have less concern about users installing malware like ad blockers. The movie and music industry will also greatly appreciate an operating system finally designed for 21st century IP protection. This will even be embraced by hardware manufacturers since they no longer need to provide open source drivers for their hardware that could be ported to other platforms. Overall a win-win for everybody.
In the end we can trust that this will result in a better user experience with more secure apps and devices.
Did anyone hear the whispers of Xooglers a few years back talking about "big changes" coming to Android that were absolutely horrible for users and done to placate industry? Hmmmm... This Fuscia thing looks pretty suspicious.
The outcome of moving drivers to user space will be proliferation of binary blobs and black box drivers. If you think binary GPU drivers are bad now, imagine an "open source" OS where every single driver is a binary blob. It will become impossible to run Fuscia devices on any other operating system because you have no drivers, sealing off the Android platform permanently.
The current situation is they're tied to a version of the kernel, and typically abandoned by the vendors. With userspace drivers and driver APIs, the "android upgrade problem" would be solved.
It'd then be a matter of reversing these drivers, which should be far easier when they're running in userspace and completely bounded.
ChromeOS was a locked down userspace on top of Linux. Fuchsia gets rid of the Linux.
That's not necessarily a bad thing -- Google's M.O. has always been to try lots of different things at once. But it may mean they literally don't have a solid long-term plan for it yet.
Why should I rewrite my Android app just because Google can't work out their internal politics?
And yes, I know that you'll probably be able to run Android apps on Fuchsia, but what about bitrot? Will JVM-language based Android be put on Life Support?
https://www.engadget.com/2007/11/05/symbian-nokia-microsoft-...
Palm's not the only company that isn't afraid to speak out on the Open Handset Alliance. Nokia, Microsoft and Symbian made it most clear today that they don't perceive danger from the new initiative and corresponding Android OS, with Nokia stating it quite bluntly: "We don't see this as a threat." Microsoft was a bit more on the defensive. "It really sounds that they are getting a whole bunch of people together to build a phone and that's something we've been doing for five years," said Scott Horn, from Microsoft's Windows Mobile marketing team. "I don't understand the impact that they are going to have."
Google certainly has the resources to do something like this. But neither of those projects (others mentioned Android) were started from scratch at Google.
(I work for open-source projects at Google, and don't see your claim being universally or even mostly true)
Everything at Google, from it's original product (search engine) to embedded devices, medical research, entire Alphabet portfolio is aimed at total dominance of every area in people's lifes. It's an evil company in my eyes, it's been a long time since I retained at least some trust in this company and it's vision.
> Lets throw away the last 20 years development on the linux kernel by thousands of people, and rewrite our own.
> How much will it cost?
> Ooh - I dunno - If you lend me 1000 engineers, we should be done in about 10 years, cos we're really smart and don't need to implement legacy SCSI support...
Good thing it's funded by someone who has lots and lots of money!
> Lets throw away the last 20 years development on the linux kernel by thousands of people, and rewrite our own.
To suggest that linux is as good as it gets is a mistake. Operating systems are challenging to write, but certainly not impossible. If you're Google, you see big security risks involved in Linux's design. Google tries to mitigate some of those by funding oss-fuzz and a ton of other great options that narrow the opportunity for exploits. But what if you could write your own OS and make particular security guarantees as a design goal?
Google has already designed and/or reimplemented almost every aspect of the OS excluding the OS kernel.
The biggest drawback for starting a new OS is generally the cost of porting existing software to the new OS.
Making something better than Linux in some way isn't hard. Making something consistently and sustainably better in enough ways, at the rate Linux moves, is a very hard task.
On top of that, Linux essentially sucked all the air out of the UNIX development space by killing off all the commercial UNIXes. Carrying Linux forward rests largely on the shoulders of the kernel team and whatever contributions other businesses feel like making.
So where is the next major OS coming from? Google and Microsoft are the last two companies with the talent to build a future OS and enough resources and clout to push it enough to get traction. (In theory, it could also come from the community but people like Linus only come along once in a generation.)
Only because they have done a really good job.
(Don't get your knickers in a knot. I'm not banging on Linux.)
From the 1980s to 1993 there were:
v7 ports: Microsoft Xenix (later became SCO), Venix, Coherent
System III ports: PC/IX (later 386/ix)
SVR3 ports: official Intel, ESIX from Everex
SVR4 ports: Dell UNIX, Novell UnixWare, MicroportEDIT: Yes, Linux has its origins sooner, and if you want to know why Linux beat the BSDs to mindshare, what was going on in 1993 is very important. But Linux wasn't competing for mindshare with Xenix, it was stuff like Solaris (which did have an x86 port, but was mostly running on SPARC), AIX (which was mostly IBM big-iron and POWER), HP-UX (which was PA-RISC and IA-64), etc.
AT&T was suspicious, but even after a careful investigation by Dennis Ritchie himself, they couldn't prove any of their code had been copied.
Given both the V7 source code and Coherent source code have now been released, you can compare them yourself and form your own opinion, if you'd like.
V7 source code: http://minnie.tuhs.org/cgi-bin/utree.pl?file=V7
Coherent source code: http://minnie.tuhs.org/cgi-bin/utree.pl?file=Coherent4.2.10
OS/2 was, in fact, created to be Microsoft's Xenix replacement (and then when Microsoft fell out with IBM, we got NT as Xenix's replacement's replacement).
They not only kept supporting it via SCO Group but even used that company to bankroll an attempt to kill Linux in court. IBM, dependent on Linux, promised a billion dollar battle. Company eventually went bankrupt but its "real UNIX" is still in use by Fortune 500 companies as legacy systems. That they sold inventory-management solutions on top of SCO Server means quite a few are mission-critical. That money coming in is probably why they keep fighting over whether it should stay bankrupt or not.
https://en.wikipedia.org/wiki/SCO_Group
Microsoft truly abandoned UNIX when they went with OpenVMS:
http://windowsitpro.com/windows-client/windows-nt-and-vms-re...
Note: Fun to remind UNIX/Linux users about that when they joke about an OpenVMS desktop. One dominates the market. ;)
I think it won because it offered neutral grounds (a place where lots of players who don't have huge market power can meet without fear of being swindled) and, partly, out of luck (you could call it 'good timing', but I don't think Linus considered that)
For good reason too. The commercial UNIXes were absurdly expensive, and they were all incompatible with each other too. There's a reason all the software developers abandoned UNIX and went to Windows. UNIX killed itself with ridiculous license fees and fragmentation. Linux saved it by making it free, open-source, and unifying it and using common standards instead of a bunch of vendors trying to make their own hoping to gain marketshare and ending up losing everything to MS. Of course, this hasn't prevented Linux from having its own share of fragmentation (the different DEs chiefly), but it's nothing like the UNIX Wars of the 80s.
Continuing on with audio, virtually everyone uses pulseaudio. JACK is pretty much reserved for audio production and is its own animal.
The majority of configuration files are similar/the same, most differences are minor. For good or ill most distros are adopting systemd.
Window managers or desktop environments are just components virtually all of which are able to be run on any distribution.
Got any more?
Plus someone has to keep track of those instructions for every single distribution.
Finally, supporting the same format isn't enough, for example a RPM for SuSE isn't the same as a RPM for Red-Hat.
Well, apparently you forgot there are people still using ALSA and OSS.
When doing desktop applications anyone that cares about UI/UX of the respective users wants to integrate with the menu system, notification on the toolbar, context menus, drag-and-drop of the window manager, printing,....
So it isn't just components.
Of course, if the goal is to have a plain twm experience, then forget about what I am saying.
Your valid issues are pretty much limited to the fact that software must be packaged for several distros in order to be suitable for distribution on even most systems and file manager integration is still something that requires you to integrate with gnome AND kde to support most users.
That's not an opinion necessarily shared by others who worked on UNIX and still do in some cases.
Certainly, there are commercial UNIX releases today that have relatively recent innovations and capabilities that still aren't available in other operating systems.
I think that is a stretch. Apple has significant investment in Darwin and are a huge contributor to LLVM. Also, don't count out Amazon ... they have their fingers in so many pies these days ...
I don't mean to bash Amazon. They do well what they do, at the scale they have. I only think the project would not fit the company as it is now.
Amazon doesn't waste money just because. But if they saw the potential return in developing an OS (say they decide that having a custom OS as their base for AWS) they are absolutely the type of company that would pursue it.
That said, I'd like to note that a custom OS for AWS (servers), and a user OS (desktop or mobile) are extremely different things.
Apple could make the next OS for Apple (presuming they were willing to take the leap to do something other than incremental improvements to their existing stable of OSes), but they aren't likely to make OSes for anyone else, so they aren't really relevant to the discussion.
> Also, don't count out Amazon ... they have their fingers in so many pies these days ...
Amazon seems to be pretty consistently plucking the low-hanging fruit from their current position. They might have the right talent to build a future OS, butz for a slightly different reason than Apple, it doesn't seem to be consistent with their orientation.
Amazon does release a modified Android. They could probably spend the money and get there.
Doesn't oracle do a fair bit of linux work?
Red hat as well. Building a new OS they do have the knowledge at least.
IBM?
You do not want these companies involved in your operating system.
The support I've had from companies like Red Hat is unparalleled.
Android is maybe using 10% of the functionality in the linux kernel but is paying all the overhead and friction of maintaining a branch for each and every device.
I think google wants to heavily encapsulate the hardware vendors drivers and customizations and provide a stable API so google can pretty much update devices with on its own without much interaction with the hardware manufacturers. (Which are very complacent about their updating)
There's only two ways around this: 1) somehow force companies to open-source their driver code, or 2) have a static, unchanging (or at least very backwards-compatible) ABI for device drivers, and then just suffer with shoddy drivers written by vendors which cause all kinds of glitchy behavior, as Windows was infamous for for so many years.
This doesn't happen with the mainline tree because it's all open-source and gets debugged and inspected by others, but that just doesn't happen with the cellphones/Android.
I'm not going to defend the vendors (much). But it's not free to upstream your code. It's work. And I'd argue that it's an investment that will pay off, but you can't fault others much for seeing it differently.
There's no guarantee some unpaid volunteer is going to do this kind of work for your company, but the chances are much higher if it's some kind of popular device.
And how is Fuchsia supposed to help that?
That model is not perfect, but it worked for MS -- and Google is in a similar enough position.
Unless there's some legal requirement, it's going to be the same fragmentation
FreeBSD will break ABI every major version, roughly every 2 years.
https://wiki.freebsd.org/VendorInformation
OpenBSD even goes so far as to break the user-space libc ABI in minor releases:
Besides toying around with FreeBSD in the late 90's, I never used it properly.
https://homes.cs.washington.edu/~levy/capabook/Chapter8.pdf
OpenVMS gave customers binary translation tools plus let clusters run with multiple, CPU architectures. That migration wasn't as painless but at least happened. Microsoft eventually applied this strategy at application level combined with OpenVMS's cross-language programming in the form of .NET CLR. It can work at much lower level as IBM showed in the 70's or 80's, though.
The reason this is possible on the PC and not on phones is because there are more standard hardware interfaces that don't exist in the ARM world. The lack of that is why the phone vendors need to do a lot of custom work.
Right now you can bootstrap a ROM because the manufacturer has to OS their kernel (GPL).
Now, with the kernel being proprietary, getting a custom ROM will probably be as hard as getting android to work on iPod.
Correct, they don't:
> From piecing together information from the online documentation and source code, we can surmise that Fuchsia is a complete operating system for PCs, tablets, and high-end phones.
Their baseline isn't hardware from 40 years ago, it's that of today and only a subset of it. That means that you can forego an enormous amount of things which are all potential sources of problems. The world has evolved a lot, new theories around OS design and security have come and gone.
Just because Linux serves us well doesn't mean we shouldn't explore other options, or that those other options need to support every old data exchange format and hardware port.
Your argument could have been used against almost every project Google's worked on. Email, search, Go, phones, Chrome, maps, etc. all had established proprietary and open source competitors.
It might be expensive, but it's cheaper, more practical, and more likely to succeed than something like self-driving cars or Google Glass.
Someone in a comment above noted that Rob Pike thinks Unix is obsolete. But then he was probably thinking about Plan9 which was indeed better than UNIX -- because it even more unixy. Filesystems all the way down.
Capabilities are the first new abstraction I have heard of that really go beyond the Unix model.
For starters, read the headlined article that observes that capabilities pre-date the UNIX model.
Even the "classic authorities" on this stuff, including Bach, Comer, Deitel, and Tanenbaum, pointed to many things that went beyond the UNIX model. And this was almost thirty years ago.
There is a wealth of experimentation and diversity that already exists and that has been done over the intervening many years. In addition to the operating systems already mentioned on this very page, there's Helios which was a capability-based system with a POSIX layer on top from the late 1980s/early 1990s. The BSD 4.4 Log-Structured Filesystem had global wear levelling in the filesystem in 1990. OS/2 1.0 went beyond terminal escape codes and multiple mouse protocols to a device-neutral video, keyboard, and mouse paradigm for TUI applications in 1987. People have done operating systems where everything really is a file, "object oriented" operating systems, network distributed operating systems, microkernel operating systems with multiple "personalities", ... all sorts.
Chrome has more code than the Linux kernel.
The numbers I see for 2012 (way back) are: "4,490,488 lines of code, 5,448,668 lines with comments included, spread over 21,367 unique files."
Linux, on the other hand, was ~ 200K lines of code for the kernel (the rest is 7 million for drivers, about which the new OS doesn't need to concern itself, as it will on custom hardware) and 2 million lines for various architectures (ditto).
Don't overestimate the complexity of building a complete kernel -- even teams as resource lacking as NetBSD can do it.
And with other parts of the stack, they already have tons of experience (e.g Skia for graphics etc).