Harvey – An effort to provide a modern, distributed, 64-bit operating system
harvey-os.org
harvey-os.org
https://fuchsia.googlesource.com/modular/+/master/docs/modul...
If it's just linking, loose coupling, it might work OK (for something like document creation or messaging) but it won't be integrated at a higher semantic level.
That's pretty much standard behavior in the mobile world. Services and activities are made available and the app petitions the OS to access those "lowest common denominator features".
Although you've decided to reffer to it in disdain, it's also a very basic principle in software design.
>geometric increase in bugs
Only if you believe that developing and maintaining specialized programs somehow increases the bug count "geometrically".
I think if a program developed with one version of n components might have x bugs, a program with two versions of n components may have (n^2)x bugs; that is, for every new version of any given component you add to the system, you multiply the number of possible configurations of the program.
Again, if it's all loose coupling, it'll work (but won't be very interesting). But if you have lots of random calendars, different mapping components, different messaging subsystems - it all becomes much, much more complex. Abstractions leak, break down. They have different ordering semantics, different performance, different failure modes, different concurrency support; there's no end to the number of problems introduced by trying to be flexible about what dependencies you plug in.
I think the doc you linked to doesn't support your idea; it sounds much more like the replacement for activities and intents in Android than what you described. The service providers have no incentive to supply data independent of a full experience (why would Bing let you show maps in your app without agreeing to a ToS? what if the map provider has different streets than the traffic provider?), the app developers have no incentive to do this (if one phone might display Bing maps and another Google in my app, how does that make my life easier?), and the user probably doesn't want this (why am I seeing grainy black and white satellite imagery in one area and high fidelity color imagery in another?).
Think of the headache gluing all that data together. Every map viewer would need to support the data format for every map provider. Every traffic service would need to expose a protocol for querying traffic data on a stretch of road, and you pray that they mostly work the same and know which streets are which. You hope that every point-of-interest provider exposes the same set of fields and level of detail you need to make them useful. And that doesn't begin to touch on the intersection of rendering things well and the data needed to make that work (which streets to show at each zoom level, arrangement of points of interest, knowing which streets are important enough to show traffic for, special cases like when freeways are closed...).
On gluing things together: look at your nearest npm-based software project. It may not be very pretty, but it works in a reasonable way.
The argument isn't very good in my opinion. Combining independent services differs from combining libraries.
"And our database will be one table with Int64 possible properties and Variant data for any type, and..."
It is time to give up on Windows Phone.
My WP 10 has received more updates than all my Android devices altogether.
Honestly that sounds disastrous. Idealistically, sure it’s a nice idea. Practically, it’d be unusable.
They seem to be doing pretty well.
Anyway, Harvey is distributed in the same way that Plan 9 is/was distributed: the services are meant to be run across a network. On a properly set up network, you'll have an authentication server which does only authentication, because that's the keys to the kingdom. Similarly, you'll have a file server which ONLY serves files, and speaks to the auth server to manage access. Then you'll have a CPU server which lets remote users connect and do stuff; it mounts its root filesystem from the file server and authenticates users with the auth server. You can also have terminal machines, which typically netboot, get their root from the file server, authenticate with the auth server, and basically act as a personal workstation for whoever sits down; when you're done working, just save your work and reboot the terminal.
Of course it doesn't have to be run like that and many people don't, because they don't want to run 4+ systems. You can combine auth, FS, and CPU services onto one machine and just connect from a Windows, Linux, or Mac machine using 'drawterm' (think of it as an ssh equivalent).
When this scheme was designed, it was frankly a little bit nutty. The CPU, auth, and file servers would be VAX or Sun systems, costing tens of thousands of dollars, and the terminals would be either slightly cheaper Suns or IBM PC-compatibles costing thousands of dollars themselves. Today, you could probably cobble together a passable network for a few hundred dollars, assuming you use cheap Atom boards for everything except the CPU server (which is meant to be a beefy compute box, but let's be honest nothing in Plan 9 uses a lot of cycles). This makes the architecture more sensible than ever.
However, if you compare setting up a Plan 9 auth server to setting up a Kerberos server... well, basically anything to do with Kerberos makes me long for death. The Plan 9 auth system is one of the best things they made and I highly recommend checking out the paper: https://css.csail.mit.edu/6.858/2013/readings/plan9auth.pdf
There was a centralized computer which was programmed via punch cards which you could dial into to submit your specific simulation and later return to for results.
But what machines are, in practice, multiuser today in that way? My work computer has only my account, and sometimes a temporary one if a technician needs to log in to troubleshoot something. For home use I don't think it makes sense. And for a prod network, again users aren't logging into the machines directly.
Actually most modern OSes in use are even older in their concepts.
Plan 9's concepts as described above have slowly creeped into Linux but not fully. So the architecture above was only experimental in the 80s/90s and is still nowhere available in the mainstream today.
So your concern is like saying "we've had macros and closures since the 70s" in a world that still uses Java/C#/etc.
"those who believed in Harvey were thought to be insane, but eventually found not to be."
So they recognize that many will think it is an insane idea but are playing a long game to prove that to be incorrect.
================================
About the Name
So, why “Harvey”? Mostly because we liked it, but there are at least 3 other good reasons based on the origins of Plan 9 operating system:
Harvey is a movie, Plan 9 is a movie too. Harvey is a rabbit, Glenda is a bunny. Most importantly: in the movie, those who believed in Harvey were thought to be insane, but eventually found not to be.
Plan9 "fixes" many of the flaws/deficiencies of the original UNIX, such as that one.
Whats cool about this Plan9 project compared to the original Plan9 is one does not need to use the Plan9 compiler to compile it. One can use gcc, clang or icc.
It is not clear why such things were never adopted. There were many licensing problems on the way, and a Microsoft monopoly pushing things into even older architectures than the competition. There were also failed modern projects, but there is little evidence to decide if it is a hard problem, greed people forced everybody into a worse path, or if it is something people do not want.
I mean, it sounds a bit like 'software defined computing' if you'll excuse the terrible metaphor, a bit like SDN which abstracted the physical networking layer.
Does Harvey abstract the hardware layer? So it could theoretically scale to a huge amount of machines that look like one giant powerful one?
Wouldn't the speed of operation be limited to the speed of the network though?
Anyway, sorry if the questions sound silly, I don't know much about this stuff.
> you'll have a file server which ONLY serves files
These sound like disadvantages. Decentralization would be better. I'd like to share the storage of all my servers and not have one auth server as a single point of failure. I imagine you can setup up a redundant auth server at the cost of more hardware but why not decentralize? This seems a lot like the old way of doing things.
I need to be told immediately why Harvey is killer and there are things you can do with it that you can't with Linux, at least not easily.
The only standout feature according to the summary is "simplified sys call". Boy, that's worth dropping Linux immediately! Not.
Don't get me wrong, I would love to show Harvey some support, but I need a compelling reason to get over the massive switching cost.
Harvey comes with pretty much everything you'd find on Plan 9. It also supports Go, and there's a (work in progress, but functional) POSIX layer which you can use to cross-compile POSIX programs.
Not that that's unusual :)
An OS in Rust would be a step forward. An OS like QNX would be a step forward. An OS like QNX in Rust would be just what the IoT world needs. But another UNIX/Linux clone? Why?
Most of the changes I know of that they've done (UFS support, ELF executables, standard C without the Plan 9 extensions, a different build system, etc..) are more in the details than the architecture.
Harvey would be cool if they would continue Inferno, but with Go instead of Limbo.
As it is, it isn't that much interesting from OS architecture point of view.
i don't have an answer exactly, but i am looking for one[0]. we are using the linux kernel because hardware support and you don't really need any special kernel features to implement a plan 9-like (read the paper, they didn't to anything special kernel-wise). i'm in the process of copying my offline notes into our wiki, so uh stay tuned or whatever.
i'm hoping to publish a really early preview build some time next week, but we'll see how far i get while i'm on holiday. it'll be soon in any case.
I'm personally rooting for HURD (https://www.gnu.org/software/hurd/hurd.html) and Barrelfish(http://www.barrelfish.org/)
Again... I understand many will argue but I also believe many will agree: we are to start phasing out C and write modern OSes in safe languages like Rust, Haskell, Go, Crystal etc. Because code written in C is almost guaranteed to be vulnerable. C has done its job when the hardware was slow and low on memory, electronic data was rarely life-important and when there were no languages and compilers that could be used as alternatives but that time has ended and now we are to consider different priorities.
Linus Torvolds probably has the best answer to why not.
https://www.reddit.com/r/programming/comments/1t0gfy/linus_t...
"When I read C, I know what the assembly language will look like."
If we want to get away from C-level twiddling, we will also need to get away from C-level hardware.
By scope, I mean that the compiler can really only see as far as the source code it is compiling. In something like an OS--especially a non-microkernel--an awful lot ends up having to be read and written across the boundary, and in an unsafe context.
Or for a traditional kernel, reading/writing directly into the address space of a user process. Wouldn't have to worry so much about race conditions there since the process could be suspended, but there is still an opportunity to fudge the indexing.