Also if you are trying to be comprehensive, don't forget about AIDL/Binder which is used by Android, and mojo, which is used by Chrome. Both of these are IPC, however they are not general enough to be used outside of their respective platforms.
To be more specific, is there really a justifiable specific of either of these applications which prevent us from having a single tool which would cover both?
Could we have a single IDL that generates two sets of serialization code one optimized for IPC and the other for network transport?
There are more of these sorts of examples I could enumerate if you find it worthwhile.
While you can have tightly-coupled, highly interactive IPC that would be pathological over RPC, where DSL/IDL and protocol semantics rightly focus on more loosly-coupled service interfaces with network error recovery, I question whether it is desirable even in the IPC case. Intra-service IPC within a single runtime can be as chatty as needed without becoming an Inter-service call (and potentially RPC in other architectures), so does Fuschia answer to an actual need - is there actually a valid use case for tight-coupled highly interactive local inter-service IPC that isn't better architected assuming RPC? Is the benefit of assumed IPC between co-located client/servers an actual problem that 'colocation optimised' RPC doesn't already solve well enough?
[1] https://www.omniorb-support.com/pipermail/omniorb-list/2006-...
It's a pretty straightforward & extendable way to do permission handling, rather than needing the kernel to do all of that natively. Whereas if you go the RPC route, then you're into not just a monolithic kernel but a larger-than-ever monolithic kernel as it's now doing permission management, too.
Really? I know you can use SCM_RIGHTS on a socket, if that is what you mean. In my mind IPC means shared mmap'd memory, though
Compared to protobufs, it's much more concerned with being more fixed width, word aligned, efficient copy-free in-memory accessable. Proto3 spends a lot of effort compressing ints on one hand but remaining flexible and allowing fields to be optional on the other.
On top of all that, there's a good deal that's specific to it's kernel, Zircon, it's permission/capabilities model, and how these messages interact with their syscalls.
I'd imagine these kinda details are going to matter a lot for a microkernel.
I don't know it as deeply but I'd say it's much closer to cap'n proto. Not sure who uses that though!
[0]: https://fuchsia.dev/fuchsia-src/reference/fidl/language/wire...
[1] https://opensource.googleblog.com/2014/06/flatbuffers-memory...
[2] https://google.github.io/flatbuffers/flatbuffers_guide_use_c...
To be fair, Binder originates at Palm[1] and seems to have been originally intended to be a full cross-platform replacement for COM, including DCOM (intended but unimplemented) and OLE (apparently implemented but unreleased[2]).
[1] http://www.angryredplanet.com/~hackbod/openbinder/
[2] https://www.osnews.com/story/13674/introduction-to-openbinde...
There can be a lot of value in rebuilding the same things from the ground up. There'll always be differences and novel things that people earlier hadn't seen. Of course it's costly and disruptive because you kill a lot of stuff, but especially in software building new things is relatively fast.
People will always complain about companies that kill a lot of products or software but at the end of the day they get more chances to build things from the ground up.
If you create a product then there is an external cost borne by the users who need to use it. And then if you replace that product with some other product, those users need to retrain.
It's really easy to create a new product, but it is a commitment for someone else to adopt it. And just because the cost is externalised, doesn't mean it doesn't exist.
Maybe there is value for managers (who got promotions) and programmers (who got promotions and learned something), but for Google there is no value at all - it losts its users.
I remember everyone using gmail chat.. that they "remade" (killed) like two times.
Everyone just moved on.
Also I dont understand why investors arent unhappy with that. Google can still earn hundreds of millions on chat. Those wont be billions, but it is still money. And "hudred million here, hundred million there" start to add up.
* Google+ (rip)
* Google Allo
* Google Chat
* Google Groups (separate from Google's Usenet service)
* Google Hangouts
* Google Messenger
* Google Duo
* SMS via Google Project Fi
* Google Voice
> And how many dozens more have they already killed?
Too many: https://killedbygoogle.com/
I expect, for example, that it is vastly more efficient to send a known datastructure over the wire in FIDL, but it is vastly more efficient to parse, modify/extend a repeated subfield, and then reserialize a protobuf.
You can't "fix" a system to achieve two goals that are in conflict, sometimes it is in fact better to have N opinionated systems, than one that is only okay at everything.
That said, there are certainly many design decisions that FIDL does do differently because the constraints of the problems it tries to solve are different as you mention.
Looks like "structs" you can only remove boxed fields by setting their references to null, but not add fields.
Except there's also an older legacy system still used in spots, though it doesn't have an IDL it's more defined in C++ macros.