1. 75
  1. 25

    Thank GOD. With all due respect to the fine folks who work on it, Gnome is a tower of tech debt and I can’t wait to see what System76 produce.

    I really feel for the small handful of devs who are paid by RH and Canonical to work on Gnome. Seeing Daniel Van Vugt’s commend at the end of this bug is a fine example of the staggering debt these folks are working against.

    1. 19

      I get where you’re coming from but a lot of that tech debt is in GTK & friends, and this is supposed to be based on gtk-rs, so it will carry over all that tech debt.

      Case in point: it seems it would still use mutter, so it’s still going to suffer from the bug you linked to.

      Also, gtk-rs is essentially a (very advanced) wrapper – some auto-generated, some manually implemented – over GTK that AFAIK is not actually developed by the GTK team, so it involves all the compatibility fun of working with GTK and obviously solves none of the problems System76 had with GTK in the past. It’s also the most mature GUI toolkit available for Rust, as someone else has pointed out here, but that’s a pretty low threshold to exceed. It still has a long way to go before it’s anything near stable.

      I don’t want to say this is bad and it’s gonna be a waste of time – quite the contrary! First, at the end of the day, this is FOSS so whatever makes these guys happy is what’s important. Second, if anything, it will at the very least give gtk-rs a lot more real-world exposure and more testing, which the whole Rust world will definitely benefit from. And, indeed, as someone else pointed out, it’s really cool that we’d see a desktop developed primarily by a company with paying customers, for its paying customers, something we haven’t seen in the Linux world in a very long time and which, IMHO, has significantly contributed to the decline in functionality and stability, in spite of the growth of “polish”, whatever that is. So I think this is really good news, I’m just… moderating my expectations a bit :-).

      1. 3

        Case in point: it seems it would still use mutter, so it’s still going to suffer from the bug you linked to.

        Boo :( So I guess my lovely System76 Thelio will continue running Windows 11 :)

        (I’m trying to run Fedora 35 KDE spin as well but that’s got some rather sincere teething pain happening)

      2. 4

        Gnome already has a dependency on Rust via librsvg and GStreamer. gtk-rs is the most mature GUI toolkit available for Rust.

        I wonder if Gnome could capitalize on this and fully embrace Rewrite-it-in-Rust with the help of System 76.

        1. 5

          That would be nice but I doubt it. Gnome has SOOOO much C code floating around.

          I could maybe see them do something like “All new development in Rust” but I seriously, SERIOUSLY doubt it :)

          1. 9

            Gnome is a tower of babel application-wise; everything from C to Python to JS.

            1. 8

              And vala.

              1. 1

                Hah! And nice seeing you here! 😊

      3. 25

        I don’t think the choice of programming language is one of the fundamental problems preventing the Linux desktop from being competitive with its proprietary equivalents.

        1. 18

          I don’t know what the reason is, honestly. But I do think that programming language(s) are an actual issue.

          The Linux ecosystem has this really strange Stockholm Syndrome around using the C programming language, even for high-level tasks, like GUI apps. That’s… insane. What a huge waste of time and energy to deal with such a primitive and bug-prone language when we have tons of other options that are much more productive and will probably perform exactly as well.

          I spent 7-ish years writing C++ and while I theoretically can read and understand C code that’s presented to me, I have ZERO confidence that I could write reasonably correct C, even if I sat and read a modern C book cover-to-cover. Then, I’m also sure that I’d spend WAY more time and energy making sure that I managed memory correctly and using the correct string functions (because, you know, basic text manipulation being a huge security problem in C makes it a GREAT choice for a user interface), than actually figuring out the best data structures or correct business logic.

          Honestly, Rust might not be the best language, either, because it’s a little too fiddly for writing applications, IMO (I think Rust would be a great fit for utilities, libraries, toolkits, etc). I think a language like Kotlin would be pretty good for GUI apps, actually. Maybe even Go.

          1. 1

            One of the main reasons I keep writing even GUIs in C is that everything substantial written for *nix is also based on C, and extremely laborious to reimplement. Language abstractions are painful to deal with–I might as well spare myself the hours of troubleshooting broken or incomplete bindings. New core libraries are also written in C, or at minimum export C ABIs, because just about anything can make use of C. It’s the lingua franca of Unix.

            Writing correct C isn’t particularly harder than it is with many other languages, so long as you use decent abstractions. Text in particular is almost a non-issue, if we’re not talking about Unicode.

            I think I spend the most time on making my C look pretty.

          2. 13

            To me, the issue is one of focus. I hope that System76’s incentives (to sell more computers) aligns better with what I want from a computing environment than the existing open source environments. I’m not counting on it, but I think that, depending on project governance, they could do some things.

            ETA: I DGAF about Rust, but if that tightens scope, then good on them.

            1. 1

              Try to do anything involved within the GNOME ecosystem, and say that again. I dare you.

              That being said, KDE doesn’t have the same impediment (could be better, isn’t really), and macOS builds on top of some horrendous stuff (and it still is competitive).

              1. 2

                Haha, I actually played with the CORBA stuff in GNOME back in the day (wrote a Ruby wrapper for it). C++ is certainly superior to C for GUI programming, I won’t deny that. But I still think the fundamental problem is misaligned incentives. A polished desktop experience just requires a lot of boring work that volunteer developers don’t want to do, and a lot of money to get it done.

            2. 13

              Rust is a really strange choice. It’s a systems programming language. A desktop environment is, by definition, in the domain of application development. I can see wanting to write some core components (bits of the graphics stack, for example, or DBUS broker) in a systems language because you want performance and I can see wanting to write things like video CODECs in a safer language because you want them to work on untrusted data but writing most of a DE in Rust doesn’t make sense to me.

              Competing stacks are using JavaScript, C#/F#, Java/Kotlin, or Dart. All of these are far easier to be productive in than Rust, at the expense of some memory overhead and tail latency, neither of which matters for typical apps (GC pauses are far smaller than a human perceives these days and the memory overhead from GC is often offset by reduced fragmentation). I wouldn’t recommend any of these for low-latency, low-jitter, scalable server applications or for use in performance-critical parts of an OS kernel (Rust would be a much better fit here) but desktop environments are a very different problem space.

              1. 10

                It’s a systems programming language.

                I think it’s slightly more nuanced than that. Quality of implementation matters a lot, and things like “build system which just works” play a great role. On the QoI metric, rust seems to score significantly higher than almost all listed alternatives. For JS, the fact that it needs a transpilation step adds irreducible accidental complexity, and npm adds a lot of reducible complexity. F#‘s build system last time I look was “write XML file which specifies the order in which to compile the files”. Java/Kotlin need a JVM implementation, which is not something that “just works” (and also gradle). Don’t know about C#. I do feel that due to tooling, the language and the ecosystem “just working”, Rust might be more productive for such large collaborative projects, despite the fact that manual memory management is pure mental overhead. It’s easier to figure lifetimes than to figure out how to ship non-statically linked software in a reasonable way.

                Dart (and also Go) is the language whose QoI is actually great. For GUI specifically, live reloading natively supported by the whole toolchain in particular is big.

                1. 5

                  C# is IMHO a good fit for desktop stuff; considering it was one of the reasons why MS developed it, and why Gnome developers initially worked on Mono. Their experience of developing desktop apps in C (Evolution specifically) was excruciating, and they thought C# was the ideal. It’s funny how much people forget Mono tried to integrate with Gnome and thus the typical GNU stack of the time; GTK#, pkg-config and the compiler, and even autotools/GAC integration. Too bad that didn’t work out…

                  1. 5

                    “build system which just works” ship non-statically linked software in a reasonable way

                    I am not arguing that Rust the language is necessarily a bad choice here, but isn’t it also true that Rust the build system hasn’t really been used at this kind of scale yet and whether it will “just work” for this case is not a given? Things like compile times and code bloat (due to static linking and potentially multiple versions of the same crate present in the build) come to mind.

                    1. 6

                      Yeah, that’s true! Specifically, if we imagine the thing as one giant monorepo which contains everything from low-level libraries, to frameworks for app developers to apps themselves, than I think we don’t have an evidence that Cargo works great, and even some evidence to the contrary: “integrating Cargo into Buck/Bazel/Pants” is a common problem.

                      OTOH, if we imagine a more distributed ecosystem, with independent applications having independent repositories and semvers, then I think we have some evidence that Rust works: crates.io ecosystem looks rather healthy.

                      The question of “can you build runtime ecosystem in Rust?” is completely open. As, maybe we actually can compile everything statically and exist on top of just kernel syscalls? Or maybe we actually need some runtime sharing via IPC / dynamic libraries? On this topic, I hope Rust stability guarantees would be an inspiration – at least some part of the community values stable APIs a lot (see, eg, serde 1.0.flipping 130: ). Having win32-stable API on Linux to do things humans interact with would be nice.

                  2. 7

                    My feeling is that desktops need reliability and every bit of space+time performance that can be squeezed out. So it seems like a DE is a perfect fit for Rust, possibly better than many other fields where it’s being forcibly pushed.

                    1. 14

                      Back around 2007ish, I was actively working on Etoile and was starting to replace Objective-C with JIT’d / AoT-compiled Smalltalk for application development. For a few weeks, I accidentally broke the compiler and so I was using the incredibly slow AST interpreter for the Smalltalk code. I was doing this on a 1.2 GHz Celeron M and the only reason that I noticed that the compiler was broken was that I read some logs that spat out an error message that it failed to dlopen the LLVM libraries. It made absolutely no difference to my user-perceptible performance.

                      My 4-year-old phone has more cores, faster cores, and more RAM than the computer I was using back then.

                      1. 2

                        reliability and every bit of space+time performance that can be squeezed out

                        This is the same way that I feel. DE must be very, very light weight. It’s what the user interacts with so it’s got to be simple, reliable, and what better way than a memory-safe low level language without external dependencies.

                        1. 2

                          I mean, they do, but applying a little common sense can get you where you want to be in terms of performance, too :-). For example Electron gets a lot of hate but, between the animations and the compositor input lag, Electron applications are pretty much as fast as native GTK applications. Over here in the FOSS world we have PTSD from experiments with JavaScript in the late 00s but that’s on us.

                        2. 1

                          I think to many people, Rust is the default language for any serious new project. Unless of course specific circumstances favor another language, such as interfacing with existing code – the common case.

                          So apart from the common case that something else is more important, my general reasoning would be:

                          • Maintainability: If I’m writing something substantial with a lot of contributors, all dynamic languages are out. I have tried Python with Mypy, but no: If some refactoring didn’t apply cleanly, it’s still a runtime error.
                          • It must not encourage bad practices: Anything that matches *-oriented is likely too narrow minded. OOP in particular is good for resource wrappers, but not as a default way to structure code: It encourages state, makes code untestable and restricts free code reuse. That disqualifies C++, whereas Go’s interfaces and Rust’s traits – OOP toned way down, are fine and good.
                          • A language can cover many “levels”: I’m not simply buying the argument that you need a high level language to write high level code: What matters in this regard is how high abstractions it enables. C++ is the benchmark in this category, but Zig has better compile time inference and Rust has things like serialization and typestate machines.
                            • Corollary: I don’t see the point in GC when you can have reference counted types.
                          • I don’t fight the borrow checker: I don’t know if it’s only me, but I find myself fighting C++‘s many papercuts much more than Rust’s borrow checker. Either, you care about ownership, in which case the borrow checker is your friend, or you don’t, in which case you use reference counting.

                          (Just my thinking. I may not be representative.)

                        3. 8

                          The biggest challenge will be rallying the Linux desktop developer communities to support this rather than whatever they are working on at the moment (Ubuntu, Linux Mint, elementaryOS, KDE, etc.) The people at System76 seem to be giving themselves a lot of work and I’m not sure if that energy will convert into a dramatically better desktop (that presumably will encourage people to buy more System76 computers).

                          1. 15

                            I think it will, and here’s why. In a word - Focus.

                            I’ve become much more involved in the Linux community again over the last 5 years, and in that time I’ve watched Gnome go through at least 3 ground-up redesigns of various subsystems. I feel like because their project is almost entirely volunteer driven except for the handful of fine folks who get paid to work on it, they go after what’s bright and shiny (e.g. rewrite/redesign) rather than focusing on what many might consider the decidedly less glamorous work of actually polishing their DE for usability and accessibility.

                            This is an area where KDE IMO shines - they’ve been quietly chugging along for the last several years adding polish and stability to their core. The big problem with trying to use KDE being that you only choices in distro are KDE Neon or a bunch of alternative spins that get even less eyeballs and love than the mainline Gnome flavors of various distributions.

                            1. 7

                              The big problem with trying to use KDE being that you only choices in distro are KDE Neon or a bunch of alternative spins that get even less eyeballs and love than the mainline Gnome flavors of various distributions.

                              OpenSUSE is one of the most established distributions and has been KDE-by-default for decades.

                              1. 2

                                Wasn’t aware. That’s great news!

                            2. 7

                              I think the attempt is more important than drawing any audience to it. You fail at 100% of the things you don’t try.

                            3. 7

                              It’s going to be interesting to have a new DE in a popular distro available by default. I’ll not sure why we ended up in this situation, but in almost every case you get the default Gnome, or you have to click through alternatives/spins/whatever to get something else. This is a welcome change.

                              1. 7

                                I agree with you, but OTOH, Ubuntu did it with Unity and a lot of people hated that.

                                I am running the Ubuntu Unity remix right now, on a PC wiped and reinstalled just this month. IMHO it’s still a great desktop and one of the best ever for Linux – but a lot of people hated it. One of the things that saddened me were people complaining that it couldn’t do things that it did easily, readily and by default – but they hadn’t learned how. (Example: multiple complaints that if you had an active icon in the dock thing for an app, you couldn’t open a new window. You can: you just middle-click the icon for a new instance. In this regard, it’s better than macOS, its inspiration.)

                                Sadly, 26 years after Windows 95, that is the only desktop metaphor most people know. It’s a good one, but there is a lot more to desktop GUIs than Win95, and most of the clones don’t even implement one of the most basic features: the ability to move the taskbar to a vertical position on one edge, where the contents remain horizontally arranged.

                                KDE, Cinnamon, MATE, Lumina – all Win95 ripoffs and can’t do this.

                                Xfce & LXDE/LXQt are the only ones I know that do it well.

                                1. 2

                                  You can: you just middle-click the icon for a new instance. In this regard, it’s better than macOS, its inspiration.)

                                  I’m not remotely surprised people are mad - convention in desktops is that middle-click doesn’t exist (or is optional), due to historical reasons of some mice literally not having a middle-click. Due to this convention, most people don’t even think to try middle-clicking, and will either left- or right-click only.

                                  The ‘problem’ here is that people don’t learn new paradigms formally - they learn by example, from using existing programs. So new entrants with new paradigms have to teach their paradigm at the same time as they’re introducing it, which means it’s impossible to be both radically innovative (as in, innovating at the very roots of your design) and intuitive/beginner-friendly. An aspect of a program can either be familiar or fundamentally novel, not both.

                                  1. 2

                                    I see what you mean, but in this instance and context, I beg to differ.

                                    Middle-clicking doesn’t do anything significant on macOS outside of web browsers, as far as I’m aware. On Windows, it triggers a free-scroll-by-dragging mechanism that I think was originally implemented by Logitech for their 3-button PS/2 and RS-232 mice, long before USB or scroll-wheels were common.

                                    But on xNix it’s an established mouse gesture with 3 meanings.

                                    1. Paste the currently-selected text at the cursor
                                    2. On a window title-bar: send this window to the back of the Z-stack, behind all other windows
                                    3. (As on Windows & macOS) Open a new browser tab to display the link being middle-clicked.

                                    AFAICR this works on FreeBSD as well as on essentially all Linuxes. I haven’t tried OpenBSD, NetBSD, Minix 3 or Plan 9 extensively enough to say.

                                    The middle-click to open a new instance behaviour is standard in browsers across all 3 major OS families. The fact that Apple and most PC laptops don’t give you a middle button doesn’t invalidate this. Clicking the scroll wheel does it on all mice and trackballs for 20+ years, and if you don’t have a middle button, clicking both left + right together does it and has done for 25+ years.

                                    This is not new or weird or radical. If people don’t know it’s there, that’s their problem, not that of Unity programmers. Or they could have taken 2min to read the single-page of quick-start instructions that Ubuntu resorted to displaying over the wallpaper when you first log in.

                                    Once again, I am frustrated and angry because most people are ignorant and lazy, so they didn’t know how to use something good and attractive and pleasing and useful, so handy functionality that I liked and used daily for many years was taken away from me.

                                  2. 1

                                    Cinnamon supports vertical taskbars. One on each side, if you want. Am I misunderstanding something about your complaint?

                                    1. 3

                                      It supports vertical panels.

                                      A panel has the contents arranged in the same direction as the panel. So if the panel is vertical, the contents are also vertical.

                                      A taskbar is different. The contents are always horizontal, whatever the orientation of the panel. Xfce calls this a “deskbar” and can do both.

                                      Here are examples of vertical taskbars: https://imgur.com/gallery/fLeAy

                                      Here’s a broken one in MATE: https://imgur.com/Fm6eZkW

                                      Notice that the menus is on its side, spacing is all over the place, launcher icons are GIGANTIC because they scale with panel width, and there’s a vertical column of status indicators.

                                      Cinnamon does something similar; I lose ¼ of the panel to a vertical column of status indicators, and I can’t have a neat single-icon-height row of them. Even the clock wraps onto 2 lines, one for the hours, and below that, the minutes. Dash-to-panel under GNOME Shell is the same.

                                      A vertical taskbar retains the horizontal orientation of the controls on the panel, but the panel itself is vertical. Make it wider, your app-switcher buttons get wider but don’t change size; you get more status icons in each row. The clock and start button stay the same size.

                                      1. 2

                                        KDE can do most of this. Here’s mine https://i.imgur.com/lx9AqBT.png

                                        I never tried to change the start or the clock size. It’s not obvious, but maybe I’m missing some options?

                                        1. 1

                                          I may have a screenshot of KDE $LATEST’s horribly broken attempt to do it somewhere, from the last time I tried. :-D

                                          Yeah, no, KDE can’t do it well at all. They never thought of the use case so it’s untested and it shows. The start button is square and scales to the width of the panel so it becomes HYYYUUUGE. Ditto the clock. The window-switcher applets – there are 2 to choose from, because KDE – try to scale the buttons to fill the available space which breaks my muscle memory.

                                          Belatedly looks at your screenshot Ha! Actually that nicely illustrates exactly the things I mean! Thank you.

                                          KDE, which has an option for everything, so the devs never thought of setting size constraints on toolbar items in a generic way (the smart thing to do IMHO and AFAICT what LXDE/LXQt does) or at least size constraints on things you may not want to scale (e.g. launcher menu and clock, which is what Xfce does.)

                                          Like it or not, the Win95-style desktop was invented by Microsoft, and in my not-remotely humble opinion, any desktop that seeks to implement the same style of desktop – taskbar, Start menu, system tray/notification area, etc. – should at least imitate the basic functionality that was in the original 26Y ago.

                                          Xfce does this, not terribly elegantly but in a nicely-customisable way. LXDE/LXQt do it, in a simpler way that’s less customisable but works. GNOME 2/MATE, Cinnamon, KDE 3/4/5 and just about every other Win95-like desktop I’ve tried on Linux or FreeBSD over the last 26 years fail to do so.

                                2. 6

                                  I wonder why no one talks about Cinnamon. Even in the HN thread it was like it didn’t exist. Its a fairly good DE that is similarly built on GTK but not Gnome, curious why there isn’t more use of it outside of Linux Mint, or Cinnamon community versions of popular distros like Manjaro or Fedora.

                                  1. 1

                                    I am using it on my new work PC, which I haven’t switched to yet because I’m waiting for a USB-C to Thunderbolt adapter to arrive.

                                    It’s decent, it works, it looks nice (especially in the Mint version – the Ubuntu Cinnamon Remix doesn’t have the XApps but sports a retina-searing orange theme.) But it doesn’t do a lot that you can’t do better with Xfce or MATE.

                                    The reason I’m trialling it is that it supports different scaling factors on different monitors, which MATE, Xfce, LXDE/LXQt and most of the others can’t do yet. If that works well, it may be a make-or-break feature.

                                    But for me, it’s harder to customise than Xfce, which itself exceeds MATE and the LX?? desktops, so I don’t see a big draw, TBH.

                                    What I would like to see is a merger of the Win9x-alike Gtk desktops, because the overlap remains very considerable.

                                  2. 5

                                    I wonder how much of this is influenced by their spat with Gnome.

                                    The reasoning given for not working with KDE or elementary (which IIRC, they do have cross-polination with) seems lacking too.

                                    1. 4

                                      The reasoning given for not working with KDE

                                      Wasn’t that reasoning just not wanting to use C++/Qt?

                                      (from the article)

                                      “Qt isn’t viable for us because our team is experienced in Rust and doesn’t want to switch to C++. Future tech is in the Rust GUI space, and that seems to be where the minds behind Qt are going,”

                                      I mean, I don’t object to using C++, but saying you don’t want to do so isn’t “lacking” in my view. C++ does carry some unpleasantness along with it, and I find it very understandable that someone might want to avoid that.

                                    2. 3

                                      Imagine in a world where we have only one, really good, Linux DE… The statement “we do it the right way and make the next step a fully fledged desktop environment equal to GNOME Shell” just sounds oddly familiar from the PL community…

                                      1. 2

                                        What I’d really like to see is a company like System76 investing more in applications rather than the desktop environment. The thing that System76 has gotten right IMO is support for gaming on Linux, I’ve set up PopOS on a Core i7 machine with a mid-range NVIDIA card and it was really easy to get Proton working and download a few games with Steam.

                                        My wants from a DE are very minimal. On my PopOS machine I’ve installed Regolith and love it. The PopOS tiling implementation is just a little wanting IMO. (For one thing I kept inadvertently toggling… something and switching the tiles from one mode to another that was unusable.)

                                        I’d be happy to pay for a decent mail client and music player. None of the alternatives are quite right, these days. I recall loving Banshee back in the day, but it’s stagnated since Novell stopped supporting people working on it.

                                        After 20+ years I’ve given up on the hope that the Linux desktop will ever congeal into something that appeals to more than 3-5% of users. I honestly don’t know who’s right or wrong in this latest kerfuffle, or if it matters, just that as a user it’s hard to feel like you can count on any particular stack being stable for more than a few years at a time. (Not that proprietary alternatives are any better…)

                                        1. 2

                                          I’d be happy to pay for a decent mail client and music player. None of the alter

                                          I agree wholeheartedly. I like the approach of Claws mail, but it was not as polished and reliable as I need for archiving all my SMTP accounts.

                                          mac’s Mail was the best, but… that’s on a “locked-down vampiric device” to quote Eben Moglen hehe

                                          1. 1

                                            My wife is completely tied into the macOS / iOS ecosystem. It has its allure. I wish I could, with a straight face, recommend Linux to her, but she’d be frustrated with it in less than a week.

                                          2. 1

                                            What do you want from a music player that cannot be found?

                                          3. 2

                                            I hope whatever they make will have support for real, fixed-layout, hotkey-switchable virtual desktops. “Dynamic” virtual desktops are comically missing the very point of that feature—being able to organize your windows into different but quickly accessible workspaces.

                                            1. 3

                                              This is already an option in GNOME and therefore (current) COSMIC. I’m not in front of a computer so I don’t know where, but there’s some toggle in the settings somewhere to make it static. macOS is similar, though their default is even worse (I don’t mind the dynamically changing number of desktops, but macOS rearranges your virtual desktops which drove me nuts until I found the option to turn it off).

                                            2. 2

                                              Interesting! I really appreciate the effort. Writing a good desktop environment is hard work – lots and lots of expertise and person-hours needed. I wish them best of luck!

                                              1. 2

                                                More thinking about this - If System76 is really undertaking a whole desktop, I don’t think they understand the enormity of the endeavor. I’d also like to know their plans around contributions and licensing, etc. When Canonical took a run at this, one of the things that (IMO) caused their effort to fail was their CLA and it being a single-vendor led initiative. For better or worse, GNOME is not a single-vendor effort. (I work for Red Hat and I’m aware that a lot of contributors to GNOME are Red Hatters but it is a separate entity with its own governance.)

                                                I’d have much more confidence in any new desktop effort if it were not a single-vendor effort and there was evidence of open governance that gave people equal footing in steering its direction. Even if a System76-led desktop had all the technical bases covered, what’s its licensing + destiny if System76 is bought up by Dell two years from now or whatever?

                                                1. 1

                                                  Tried to post a link about how a GNOME developer feel about this, but got deleted by moderators with “passing on this drama” as motive. If you’re curious, see https://blogs.gnome.org/christopherdavis/2021/11/10/system76-how-not-to-collaborate/