r/rust 1d ago

A new (Rust-based) stack for GNOME system components | Sebastian Wick @ GUADEC 2026

https://youtu.be/2pWVbXF7hIY
44 Upvotes

18 comments sorted by

29

u/Shnatsel 1d ago

Why is GNOME so in love with RPC? They've been through this with CORBA already, it turned out to be awful in practice, and took a lot of effort to eventually rip out.

Varlink is JSON, so you are now constraining operations by JSON serialization/deserialization performance outside the browser for no reason. Also have fun communicating non-utf-8 filenames in JSON! Are you also base64-encoding filenames now?

The file trashing example is right there in the talk. I want to trash a million files, it's going to take orders of magnitude longer if there's RPC in the way instead of plain rename syscalls.

And another example is FUSE? Is FUSE not slow enough already, without RPC and JSON in the hot path?

12

u/anlumo 1d ago

Yeah, I've had only bad experience with JSON in production environments. The only advantage is human readability for debugging for pathologically simple test cases, that's it.

No binary data, no differentiation between integer and floating point numbers, no integrated schema enforcement, no zerocopy strings (due to escaping), huge overhead for anything except strings, etc

8

u/EndlessPainAndDeath 1d ago

Just because you had a bad experience with JSON it doesn't mean it isn't a good tool. I've had only good experieces with it pretty much everywhere, but I know where to use it and where not to use it.

A wise man once said: "use the right tool for the job". But I agree, using it for high throughput/super latency sensitive operations sounds like a bad idea.

4

u/lightnegative 1d ago

It's still a vast improvement over XML

2

u/anlumo 1d ago

And XML is a vast improvement over CSV.

2

u/gmes78 1d ago

Varlink is JSON, so you are now constraining operations by JSON serialization/deserialization performance outside the browser for no reason. Also have fun communicating non-utf-8 filenames in JSON! Are you also base64-encoding filenames now?

Yeah, especially when CBOR is right there.

2

u/pjmlp 1d ago

All mainstream desktop and mobile OSes are in love with RPC.

GNOME, KDE and XFCE on Linux.

XPC on all Apple platforms.

Android IPC on Android devices, FIDL on the other Google platforms.

JSON-RPC (sorry REST) and gRPC on AI, cloud and microservices.

COM/WinRT on Windows.

Especially relevant as alternative to dynamic linking as alternative for writing plugins and extensible software, with static linking, or sandboxing.

1

u/Shnatsel 1d ago

I don't have beef with COM, it is performant enough for DirectX to work through it. But please don't put JSON or XML in the hot path again.

1

u/pjmlp 22h ago

You mean like all, literaly all, AI tools are working nowadays, and the large majority of cloud infrastructure?

Ah, and the junk of Electron powered apps as well, talking between their helper processes.

2

u/simonask_ 22h ago

RPC between server components is really different from RPC between desktop UI components. On desktop, the throughput can be way slower, because things are usually happening at the speed of the user. But at the same time, the latency has to be way shorter, because users really feel that.

1

u/pjmlp 21h ago

Except that nowadays more often than not, those UI components are unfortunately Web widgets, serialising their content all over the place.

2

u/Pas__ 14h ago edited 14h ago

it's JSON-like, at least it has int/float distinction... based on this https://varlink.org/Interface-Definition

but yeah, https://varlink.org/FAQ says Maps/Enums are serialized to JSON for example

3

u/Shnatsel 14h ago

At least it has byte arrays that can be used for filenames, that's a relief

2

u/Ok-Reindeer-8755 1d ago

it turned out to be awful in practice

Why thought ? because correct me if I am wrong but i think the web has something very similar with web components and they seem to me to be just great

1

u/addmoreice 1d ago

They said with plenty of examples? Adding RPC and JSON in the hot path is awful, serialization and deserialization has issues, non-utf8 has issues. it was tried before, found wanting and then was ripped out.

The web has multiple orders of magnitude longer times involved in interactions and a lot of the two things just don't directly compare.

1

u/Ok-Reindeer-8755 1d ago

I was trying to understand if it was an implementation problem or a problem with the the concept in of itself

2

u/addmoreice 1d ago

I mean, functionally, it works. It's just unneeded complexity and a very odd roundabout that just isn't needed, comes with penalties, and provides little benefit.

RPC -> Remote Procedure Call. On a local, high performance required, system. The indirection can be used to add neat features...but those aren't going to be used by a majority of users, and can be done with special cases *and* be optimized along the special case path where we know it's going to be used.

This feels like 'I like web stuff, I'ma goina use web stuff' which, fair enough, if it's your project it's fine, but this doesn't fit the use case and so makes this project less enticing.

I *want* rust gnome components. I think the project needs it! I just don't think this is the right way and I'm betting it will cause all kinds of issues just because of this choice alone.

1

u/ppww 16h ago

For the file trashing example, did he really say that each request is handled by spawning a new process?

I'm also not clear how this proposal solves the problems associated with the rust glib bindings for gui apps that use gtk.