1. 8

    Do watch with a critical mind.

    Spoiler: This is Linux propaganda.

    1. 2

      Yeah the way he quickly brushes over support for things like games and video editing applications seemed weird to me. While the situation has improved slowly over the past decade or two, the lack of access to industry standard video and audio editing software seems like a compelling argument for why Linux on the desktop is infeasible for so many people. Likewise, the set of games available on Linux is a strict subset of those on Windows, and said games typically run better and are better supported on Windows. If either of these categories of applications are important to you, Linux is a poor choice.

      1. 3

        There’s a lot of discussion of games being the factor for desktop Linux, but I don’t see it; at least as anything more than a value add. You can live without games, but you can’t live without the tools for work, whatever it might be. (Programmers like us have a luckier break here.) I think a lot of that discussion is because of how big the overlap between sites like Reddit and people who eat, live, and sleep PC gaming are.

        1. 2

          You can live without games, but you can’t live without the tools for work, whatever it might be.

          The home desktop computer is a dying breed. Its use case is slowly being usurped by laptops (which are still mostly desktops), tablets, and phones. However, one use case which is not going away is gaming. Desktop computers offer one of the best gaming experiences out there. Many users stick to windows primarily because their favorite game only runs there.

        2. 2

          lack of access to industry standard video and audio editing software seems like a compelling argument for why Linux on the desktop is infeasible for so many people

          Do many people use this kind of software? I would imagine it’s fairly specialized?

          (Lack of) games are probably more important, especially because there’s a social component to that as well: if your friends are playing a game then you’d like to join in on that specific game. When the whole coronathing started some of my friends were playing Soldat, but I couldn’t get it running on my Linux machine so I missed out 🙁 (wine errored out, it’s been open sourced yesterday though, with Linux support, so need to look again).

          1. 4

            I have helped around a dozen or so ‘regular people’ over the years who did not want to pay the Apple tax and whose Windows laptops had become totally unstable move over to Linux desktops. This is the list of apps they care about:

            • Firefox / Chrome
            • LibreOffice

            One time I had to help someone get some weird Java app for their schoolwork installed. Most people are content consumers, not creators.

          2. 2

            The games situation is pretty good, in no small way thanks to Valve. Nearly half of my large steam library is linux-native, whereas most of the remaining games work with proton, without hassle.

            However, the situation with Video and Audio is more of a joke. All the open video editors are terrible. At least we can play videos now; I remember the pre-mplayer era, and now we have mpv which is fantastic.

            As for audio, the laymen suffer from Pulseaudio, which is still irritatingly bad. The production side of audio is much better thanks to jack, but only if running under Linux-rt, as when for whatever reason I boot mainline, jack gets xruns after a while, even with 20ms buffer.

            1. 3

              All the open video editors are terrible

              It depends somewhat what you want to do; OBS studio is pretty nice for its use case, but I wouldn’t want to produce a film.

              As for audio

              The lack of reliable timeslices is pretty terrible on mainline linux. Doesn’t affect me often, as I have 24 cores, but if I’m running something intensive I’ll sometimes get audio skipping in 2020 (which literally never happened back in 2005 on windows).

              1. 2

                if I’m running something intensive I’ll sometimes get audio skipping in 2020

                The Linux kernel likes to thread into long, dark and narrow corridors, not yielding the cpu to SCHED_FIFO/RR tasks until much later than the time they become runable.

                I did boot into mainline recently and saw some of the usual pathological behaviour. Then I ran cyclictest -S -p99 and spotted 10000µs peak within seconds. Appalling.

                (which literally never happened back in 2005 on windows).

                Or 1985 on AmigaOS.

                1. 4

                  The Linux kernel likes to thread into long, dark and narrow corridors, not yielding the cpu to SCHED_FIFO/RR tasks until much later than the time they become runable.

                  Are there open-source kernels that don’t do this and support a variety of mainstream hardware? Genuinely curious.

                  1. 3

                    Most RTOSs do try hard to handle this reasonably.

                    If lives depend on it, seL4 is the only protected mode (to my knowledge) kernel with formal proofs of response time (WCET) and correctness.

                    But if your use case is audio, you’ll probably be fine by simply booting into linux-rt (Linux with the realtime patchset) and generally avoiding pathologically bad (pulseaudio) software in your audio chain, using straight alsa or a pro-audio capable audio server (jackd, hopefully also pipewire in the future).

                    You should also ensure the relevant software does not complain about permissions not allowing execution as SCHED_FIFO or SCHED_RR. In my opinion, they should outright refuse to run in this situation (except perhaps by forcing them to SCHED_OTHER with a parameter) rather than run in a degraded manner, but it is a separate issue, another of the many issues in the ecosystem.

                  2. 3

                    I’m more impressed by the 2005 result because it had a task scheduler. Of course the Amiga didn’t leave jobs paused - it didn’t pause them!

                    1. 0

                      What do you specifically mean by task scheduler?

                      AmigaOS’s “kernel” (exec.library) provides preemptive multitasking with priorities.

                      This is what a task looks like: http://amigadev.elowar.com/read/ADCD_2.1/Libraries_Manual_guide/node02BB.html

                      And this for reference on the bitmap flags: http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node008E.html

                      Essentially the run/ready/wait we’re used to.

                      Where the Amiga is almost cheating is by using a 68k CPU. They have very fast interrupt response, further helped by being vectored. x86 is a sloth on this.

                      1. 3

                        Wait, really? That’s earlier than I’d realized (the computer I was using in 1990 could hibernate a process but switching back was 2-3 seconds wait and IIRC the process had to ask to be switched away from).

                        1. 3

                          Yes, AmigaOS had preemptive multitasking with priorities from day0.

                          Furthermore, it also had a message-passing system called ports, which was used for IPC, including a good part of user tasks talking to the OS, which was a multi-server OS (internally split as services, running as tasks, with exec.library being the closest thing to a kernel we had, as it did handle task switching, IPC, memory management and early hw initialization).

                          AmigaOS supports shaded libraries, and the os itself looks like a bunch of shaded libraries to application programmers.

                          Your Amiga curiosity can further be satisfied by the documents available at: http://amigadev.elowar.com/

                          Early AmigaOS (1985-1990) is <V37. Functions that claim to be V37+ are from the more modern AmigaOS days (AmigaOS 2.0+, 1991+), so you can easily see what was made available when.

                          The famous “Every OS sucks” song special cases AmigaOS as the exception… for good reason. Overall, I still consider its design to progress in many ways relative to UNIX. If you ever see me rant about UNIX-like systems, now you know where I am coming from.

          1. 25

            I’m going to give a null option here. There just isn’t anything native that’s both good and portable.

            • I used to find Cocoa somewhat enjoyable, but it’s obviously totally non-portable. I feel like nowadays it’s getting more buggy and the documentation has degraded. There are no more Technical Notes getting published, and new APIs ship with “No Overview Available” instead of docs.
            • Qt is intimately tied to C++, and I just can’t stomach C++.
            • I’m currently using GTK, but on macOS it feels even slower and more alien than Electron.

            I haven’t seen anything close to web dev tools for native GUI development. Xcode can inspect GUI, but it’s a toy compared to browser’s inspector. I can edit CSS live without reloading my UI, and control every pixel with relative ease. I can build fancy animated web UI in a shorter time than it takes me to get a makefile work across systems.

            1. 5

              You can use a Python binding with Qt. There’s PyQT5 and PySlide (and Qt, which is a wrapper around both; depending on what’s installed).

              1. 1

                Interesting! I can’t recall seeing such apps in the wild. Do you know any popular apps that are built using that combo?

                  1. 2

                    I wrote this one:

                    https://gitlab.com/djsumdog/mpvbuddy

                    and have a few more I haven’t released yet.

                1. 4

                  Yeah I’m yet to find a cross platform GUI toolkit that makes for nice Mac apps, Cocoa is really the only option if you want to make something that feels polished and high quality. But often the apps using these cross-platform toolkits are apps that wouldn’t get ported to the Mac otherwise, so I’m willing to accept the tradeoff of a slightly clunky GUI in exchange for having access to a useful piece of software.

                  1. 2

                    What version of GTK do you use right now?

                  1. 1

                    Re the first point; why not

                    text-run    = span text-run | span
                    span        = strong | em | strong-em | normal-text
                    strong      = "**" normal-chars "**"
                    em          = "*" normal-chars "*"
                    strong-em = "***" normal-chars "***"
                    normal-text = [a-zA-Z0-9 ]
                    normal-chars = normal-text normal-chars | ""
                    
                    1. 2

                      It wouldn’t properly match **this **text**.

                      1. 2

                        I was only talking about the first point; which is talking about ambiguity between double em and strong

                        1. 1

                          Oh, I see what you’re saying now. Mea culpa. I think there’s still some ambiguity though with how **** should be interpreted, as normal-chars can be empty.

                          1. 2

                            Hmm, I see. It could be either (**)(**) or (****). However, there is no empty bold or italic block; so we could also require at least a single char here, and make the empty a part of the text-run.

                            tex-run = span text-run | ""
                            normal-chars = normal-text normal-chars | normal-text
                            
                            1. 2

                              I suddenly get why language designers love fuzzers so much.

                              (Edit: because finding ambiguous cases here is hard on my brain)

                        2. 1

                          And what is the proper way to match **this **text**? I entered it into Babelmark, and it seems like there are substantial differences even between the most well-known Markdown parsers.

                        3. 1

                          Here’s an edge case that breaks this grammar:

                          **Bold and *Italic***
                          

                          which renders as Bold and Italic using Lobsters’ Markdown renderer

                          1. 1

                            You are right, this does break my posted grammar. I think I can fix it with a leveled grammar though – i.e strong2 only allows normal text or a single level em, etc. Will post an update if I find it.

                        1. 4

                          Lots of good things were originally unintended or semi-intended results of technical limitations. The /usr split is still a good idea today even if those technical limitations no longer exist. It’s not a matter of people not understanding history, or of people not realising the origins of things, but that things outgrow their history.

                          Rob’s email is, in my opinion, quite condescending. Everyone else is just ignorantly cargo-culting their filesystem hierarchy. Or perhaps not? Perhaps people kept the split because it was useful? That seems a bit more likely to me.

                          1. 19

                            I’m not sure it is still useful.
                            In fact, some linux distributions have moved to a “unified usr/bin” structure, where /bin, /sbin/, and /usr/sbin all are simply symlinks (for compatibility) to /usr/bin. Background on the archlinux change.

                            1. 2

                              I’m not sure it is still useful.

                              I think there’s a meaningful distinction there, but it’s a reasonable decision to say ‘there are tradeoffs for doing this but we’re happy with them’. What I’m not happy with is the condescending ‘there was never any good reason for doing this and anyone that supports it is just a cargo culting idiot’ which is the message I felt I was getting while reading that email.

                              In fact, some linux distributions have moved to a “unified usr/bin” structure, where /bin, /sbin/, and /usr/sbin all are simply symlinks (for compatibility) to /usr/bin. Background on the archlinux change.

                              I’m not quite sure why they chose to settle on /usr/bin as the one unified location instead of /bin.

                              1. 14

                                That wasn’t the argument though. There was a good reason for the split (they filled up their hard drive). But that became a non-issue as hardware quickly advanced. Unless you were privy to these details in the development history of this OS, of course you would copy this filesystem hierarchy in your unix clone. Cargo culting doesn’t make you an idiot, especially when you lack design rationale documentation and source code.

                                1. 2

                                  … it’s a reasonable decision to say ‘there are tradeoffs for doing this but we’re happy with them’. What I’m not happy with is the condescending ‘there was never any good reason for doing this and anyone that supports it is just a cargo culting idiot’ which is the message I felt I was getting while reading that email.

                                  Ah. Gotcha. That seems like a much more nuanced position, and I would tend to agree with that.

                                  I’m not quite sure why they chose to settle on /usr/bin as the one unified location instead of /bin

                                  I’m not sure either. My guess is since “other stuff” was sticking around in /usr, might as well put everything in there. /usr being able to be a single distinct mount point that could ostensibly be set as read-only, may have had some bearing too, but I’m not sure.
                                  Personally, I think I would have used it as an opportunity to redo hier entirely into something that makes more sense, but I assume that would have devolved into endless bikeshedding, so maybe that is why they chose a simpler path.

                                  1. 3

                                    My guess is since “other stuff” was sticking around in /usr, might as well put everything in there. /usr being able to be a single distinct mount point that could ostensibly be set as read-only, may have had some bearing too, but I’m not sure.

                                    That was a point further into the discussion. I can’t find the archived devwiki entry for usrmerge, but I pulled up the important parts from Allan.

                                    Personally, I think I would have used it as an opportunity to redo hier entirely into something that makes more sense, but I assume that would have devolved into endless bikeshedding, so maybe that is why they chose a simpler path.

                                    Seems like we did contemplate /kernel and /linker at one point in the discussion.

                                    What convinced me of putting all this in /usr rather than on / is that I can have a separate /usr partition that is mounted read only (unless I want to do an update). If everything from /usr gets moved to the root (a.k.a hurd style) this would require many partitions. (There is apparently also benefits in allowing /usr to be shared across multiple systems, but I do not care about such a setup and I am really not sure this would work at all with Arch.)

                                    https://lists.archlinux.org/pipermail/arch-dev-public/2012-March/022629.html

                                    Evidently, we also had an request to symlink /bin/awk to /usr/bin/awk for distro compatability.

                                    This actually will result in more cross-distro compatibility as there will not longer be differences about where files are located. To pick an example, /bin/awk will exist and /usr/bin/awk will exist, so either hardcoded path will work. Note this currently happens for our gawk package with symlinks, but only after a bug report asking for us to put both paths sat in our bug tracker for years…

                                    https://lists.archlinux.org/pipermail/arch-dev-public/2012-March/022632.html

                                    And bug; https://bugs.archlinux.org/task/17312

                              2. 18

                                Sorry, I can’t tell from your post - why is it still useful today? This is a serious question, I don’t recall it ever being useful to me, and I can’t think of a reason it’d be useful.

                                1. 2

                                  My understanding is that on macOS, an OS upgrade can result in the contents of /bin being overwritten, while the /usr/local directory is left untouched. For that reason, the most popular package manager for macOS (Homebrew) installs packages to /usr/local.

                                  1. 1

                                    I think there are cases where people want / and /usr split, but I don’t know why. There are probably also arguments that the initramfs/initrd is enough of a separate system/layer for unusual setups. Don’t know.

                                    1. 2

                                      It’s nice having /usr mounted nodev, whereas I can’t have / mounted nodev for obvious reasons. However, if an OS implements their /dev via something like devfs in FreeBSD, this becomes a non-issue.

                                      1. 2

                                        Isn’t /dev an own mountpoint anyways?

                                        1. 1

                                          It is on FreeBSD, which is why I mentioned devfs, but idk what the situation is on Linux, Solaris and AIX these days off the top of my head. On OpenBSD it isn’t.

                                          1. 2

                                            Linux has devtmpfs per kernel default.

                                  2. 14

                                    The complexity this introduced has far outweighed any perceived benefit.

                                    1. 13

                                      I dunno, hasn’t been useful to me in the last 20 years or so. Any problem that it solves has a better solution in 2020, and probably had a better solution in 1990.

                                      1. 6

                                        Perhaps people kept the split because it was useful? That seems a bit more likely to me.

                                        Do you have a counter-example where the split is still useful?

                                        1. 3

                                          The BSDs do have the related /usr/local split which allows you to distinguish between the base system and ports/packages, which is useful since you may want to install different versions of things included in the base system (clang and OpenSSL for example). This is not really applicable to Linux of course, since there is no ‘base system’ to make distinct from installed software.

                                          1. 3

                                            Doesn’t Linux have the same /usr/local split? It’s mentioned in the article.

                                            1. 5

                                              I tend to rush for /opt/my-own-prefix-here (or per-package), myself, mainly to make it clear what it is, and avoid risk of clobbering anything else in /usr/local (like if it’s a BSD). It’s also in the FHS, so pedants can’t tell you you’re doing it wrong.

                                              1. 4

                                                It does - this is generally used for installing software outside the remit of the package manager (global npm packages, for example), and it’s designated so by the FHS which most distributions follow (as other users have noted in this thread), but it’s less prominent since most users on Linux install very little software not managed by the package manager. It’s definitely a lot more integral in BSD-land.

                                                1. 3

                                                  […] since most users on Linux install very little software not managed by the package manager

                                                  The Linux users around me still do heaps of ./configure && make install; but, I see your point when contrasted against the rise of PPAs, Docker and nodenv/rbenv/pyenv/…

                                                  1. 3

                                                    Yeah, I do tons of configure make install stuff, sometimes of things that are also in the distro - and this split of /usr/local is sometimes useful because it means if I attempt a system update my custom stuff isn’t necessarily blasted.

                                                    But the split between /bin and /usr/bin is meh.

                                              2. 1

                                                That sounds sensible. Seems like there could be a command that tells you the difference. Then, a versioning scheme that handles the rest. For example, OpenVMS had file versioning.

                                          1. 21

                                            Catalina runs best on Macs with hardware specifications that Apple marketing isn’t yet prepared to make the baseline for models such as the iMac.

                                            So MacOS Catalina is like Windows Vista?

                                            1. 7

                                              Yes. Having been a Windows user at that time, all I feel are unpleasant flashbacks.

                                              1. 2

                                                In that case, on the upside macOS in 2-3 years is going to be absolutely fantastic for 5-7 years!

                                                1. 3

                                                  You jest but I’m looking forward to it.

                                                  1. 3

                                                    And then it will be cursed to become a user-hostile ad platform that you have to pay for, until the end of time.

                                                2. 1

                                                  Using any new piece of software triggers roughly two dozen security prompts, so yes.

                                                1. 6

                                                  Neat! There are several Scheme/LISP implementations that run on IOS already and are in the app store. Pixie Scheme, Gambit Scheme, and one other Scheme/LISP editor/evaluation environment I can’t remember the name of.

                                                  Be great to see Racket added to the list!

                                                  1. 1

                                                    Also also there’s another new one but it’s just XLisp based called LispCube, and that editor/REPL I was thinking of is for Closure and is called Replete.

                                                    1. 1

                                                      Agreed, the idea of running an application written in Racket on an iOS device is appealing, but I’d really love to see a full fledged programming environment like DrRacket ported over.

                                                    1. 1

                                                      To give a bit of context as to where VS Code fits into my development workflow: I use Xcode for iOS development as using anything else feels masochistic, when I need to make quick edits to config files or scripts I use vi, and for basically everything else I use VS Code.

                                                      For my main use case of JavaScript, Ruby, and occasional Rust development, I have the following setup:

                                                      • Dracula Colour Theme - which I sometimes find a little garish, but provides good contrast and also supports every piece of software under the sun
                                                      • Material Icon Theme - which I’ve found makes it easier for me to quickly recognise file types compared to the built in icon theme
                                                      • Prettier - a very nice formatter for TS / JS / CSS / HTML and many other languages
                                                      • ESLint - my linter of choice for both vanilla JS and TypeScript projects
                                                      • Ruby - for integration with linters, slightly better syntax highlighting, and a few other small niceties
                                                      • Ruby Solargraph - very basic IDE integration for Ruby projects. It doesn’t work amazingly well, but static analysis of Ruby programs seems like a tough problem to solve.
                                                      • Rust (pls) - for powerful IDE style features when working on Rust projects, configure language-specific indentation preferences, and so on.

                                                      I’ve also made a few settings tweaks to hide the useless “Open Editors” sidebar section,

                                                      1. 17

                                                        I’m using fish as well as my daily driver, and switched to it more than 2 years ago.

                                                        I like that everything is to my liking out of the box, without having to use any plugins for advanced features. I’m using the vim mode in it, and use starship as prompt.

                                                        It doesn’t support some bash syntax such as && or !!, but is otherwise very compatible. It changed some things for the better. Problems with this when copy-pasting snippets from others are rare, but I sometimes open bash just to run that snippet.

                                                        1. 9

                                                          If you’re running a recent build of fish, the bash-style && syntax should work.

                                                          1. 2

                                                            Same. I bounced off zsh a couple times before this, and fish itself once due to some bugs which the maintainer was quite gracious about (one of my first open source interactions iirc!), but after a long hiatus of putting up with bash’s nonsense I tried fish again and fell in love with it for just providing the Right Stuff for my use case.

                                                            Unfortunately, $WORK has quite a lot of important dev tooling written in bash, so I’m still using it by default there. Maybe someday I’ll have it all migrated to Python.

                                                          1. 36

                                                            I use fish on macOS. There’s occasional headaches due to its lack of bash compatibility, but I find the ergonomics of using it to be much nicer than bash, zsh, or any other bash-compatible shell I’ve tried.

                                                            1. 2

                                                              As you I use fish for my shell (with oh-my-fish).

                                                              For short/quick scripts I use zsh generally using a nix-shell bang pattern like this:

                                                              #!/usr/bin/env nix-shell
                                                              #!nix-shell -i zsh
                                                              #!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
                                                              #!nix-shell -p minify
                                                              
                                                              minify $1 > $2
                                                              

                                                              And when I’m serious about a script that I switch to turtle.

                                                              1. 2

                                                                I find autocomplete and highlighting in fish are amazing compared to any other shell I’ve used

                                                              1. 3

                                                                Unfortunately a lot of these CSS-based tricks are pretty terrible in terms of accessibility. Granted, a lot of JS-heavy websites tend to be pretty poor when it comes to accessibility, but that’s largely a result of it being a low priority, rather than any technical limitations of JS-based web apps.

                                                                1. 16

                                                                  The headline is a bit weird. The article is about “these apps are so popular, Apple went out of their way to ensure they still worked”. It’s not clear that the apps were buggy, except in the NSBundle unload case.

                                                                  1. 5

                                                                    To me it’s more accurate to say that Apple frameworks are buggy and older versions of those apps had to use workarounds and depend on the buggy behaviour until Apple decides to fix those bugs.

                                                                    I wouldn’t be surprised if Apple knew about some of the bugs from the developers of the apps during the beta period of a new OS. It doesn’t necessarily mean that Apple actively tests all of those apps as part of its OS QA routine.

                                                                    1. 4

                                                                      Yeah to me the article read like “Apple consider’s these apps important enough that they go to extra lengths to ensure OS updates don’t break them”. The title here seems weirdly judgey and negative.

                                                                  1. 1

                                                                    Why oh why did they have to call it “bionic”…were they trying to increase general nomenclature confusion?

                                                                    https://en.wikipedia.org/wiki/Bionic_%28software%29

                                                                    1. 4

                                                                      All the names that are actual words are already taken by someone somewhere. Naming something these days with a word is a guaranteed collision.

                                                                      1. 1

                                                                        See also Apple’s A11 Bionic processor (the one that’s in the iPhone X)

                                                                        1. -1

                                                                          Increasing general nomenclature confusion is kind of all the Ubuntu release code-names are good for, yes.

                                                                        1. 2

                                                                          This is the first April Fool’s thing I’ve seen that’s brought a sincere smile to my face, what a fun idea.

                                                                          1. 6

                                                                            Great article, the over-dependence on lodash in many modern JS codebases reminds me of sites back in the day which would import jQuery just so they could run code on DOMContentLoaded. Howere,

                                                                            if you really do need lodash, and there’s still plenty of good reasons to use it, I’d recommend using the lodash-es package,,which breaks lodash down into ES Modules. This means modern JS bundlers like webpack and rollup which are aware of ES modules can strip the unused parts of lodash from your production bundle.

                                                                            1. 6

                                                                              I’m continuing to work away at that Lobsters iOS / Android app, and it’s getting to the point where I’d probably feel okay throwing it up on the App Store / Google Play as a free download for others to use. It really has a pretty limited use case though, since as far as I know Lobsters doesn’t have any way for third-party applications to authenticate users, limiting my app to being read-only.

                                                                              I’ve also been learning Rust with the fantastic official docs, and Ive started porting a half-complete Swift Game Boy emulator I worked on years ago to Rust. It’s definitely taking me a while to wrap my head around lifetimes and borrow semantics, but I’m really enjoying the experience.

                                                                              1. 1

                                                                                Re Lobsters login, can you not simulate the regular login process with a library? And then use that session for posting?

                                                                              1. 7

                                                                                The repository pattern he describes here sounds very similar to how Elixir’s Ecto library works, which is one of the things I’ve historically really liked about Elixir / Phoenix over Ruby / Rails. It’s great to see those ideas gaining traction in the much larger Ruby community.

                                                                                1. 4

                                                                                  If I move off of OS X, it will be to Windows. For what I use my machine for, the applications simply aren’t there on any Unix other than OS X.

                                                                                  1. 4

                                                                                    I’ve been using Linux as my main desktop since about 3 years and used all of the major desktop environments. KDE Plasma looks good but either its file indexer (baloo) is taking hostage of one CPU core or the desktop crashes if you type specific words or too fast in the launcher, in short a horrible experience. I used Gnome for about a year and it was not much better, the plugins/extensions are often buggy and especially under wayland it crashes often and can’t restart like on X11, i.e. you loose all of your session state. Additionally, it feels laggy even on a beefed out machine (6 cores, latest gen. AMD GPU) because the compositor is single-threaded. GDM, gnome’s display manager, is also sluggish, runs since gnome 3.26 a process for each settings menu and starts a pulseaudio session which breaks bluetooth headset connections. Also unsuable for a productive environment in my opinion. Eventually I switched back to the desktop environment with what I started my Linux journey, namely XFCE with lightdm as a display manager. With compton as compositor it looks quite okay, is rock solid (in relation to the other DE I used) and everything feels snappy. As a note, I run all of the DEs on Arch Linux and I haven’t even talked about display scaling and multi-monitor usage, still a horror story.

                                                                                    TL;DR The year of the Linux desktop is still far away in the future.

                                                                                    1. 5

                                                                                      I wouldn’t really know where to go. I have an Arch desktop at home (quad Xeon, 24 GB RAM, 2 SSDs), while the machine is much faster than my MacBook Pro, I usually end up using the MacBook Pro at home (and always at work), simply because there are no equivalents for me for applications like OmniGraffle, Pixelmator/Acorn, Microsoft Office (project proposals are usually floated in Word/Excel format with track changes), Beamer, etc. Also, both at work and home, AirPlay is the standard way to get things on large screens, etc.

                                                                                      Also, despite what people are saying. The Linux desktop is still very buggy. E.g. I use GNOME on Wayland with the open amdgpu drivers on Arch (on X I can’t drive two screens with different DPIs). And half of the time GNOME does not even recover from simple things like switching the screen on/off (the display server crashes, HiDPI applications become blurry, or application windows simply disappear).

                                                                                      Windows would probably have more useful applications for me than Linux or BSD (since many open source applications run fine on WSL). But my brain is just fundamentally incompatible with any non-unix.

                                                                                      1. 8

                                                                                        Linux has been my main desktop for 20 years or so? Although I am a software developer and either do not need the applications you mentioned or use alternatives.

                                                                                        Anyway, what I actually wanted to say: on the hardware side I’ve had little issues with Linux, certainly not more than with Windows or OS X and at least with Linux (if I put the time into it) the issues can generally be fixed. I’ve been running multiple monitors for years and hibernation used to be a pain in the ass in the early 2000’s but has been good for me on a wide array of hardware for years (definitely better than both Windows and OS X which run on supported hardware!). Granted, I can’t blindly grab hardware off the shelf and have to do some research up front on supported hardware. But that’s what you get if hardware vendors do not officially support your OS and it does come with many upsides as well.

                                                                                        I run pretty bare systems though and try to avoid Window’isms that bring short-term convenience but also bring additional complexity, so no systemd, pulseaudio, desktop environments like Gnome for me. Still, I’m running Linux because I want to be able to run Dropbox (actually pCloud in my case), Steam, etc.

                                                                                        1. 4

                                                                                          Linux has been my main desktop for 20 years or so?

                                                                                          Different people, different requirements. I have used Linux and BSD on the desktop from 1994-2007. I work in a group where almost everybody uses Macs. I work in a university where most of the paperwork is done in Word (or PDF for some forms). I have a fair teaching load, so I could mess around for two hours to get a figure right in TikZ (which I sometimes do if I think it is worth the investment and have the time) or I could do it in five minutes in OmniGraffle and have more time to do research.

                                                                                          It’s a set of trade-offs. Using a Mac saves a lot of time and reduces friction in my environment. In addition, one can pretty run much the same open source applications as on Linux per Homebrew.

                                                                                          I do use Linux remotely every day, for deep learning and data processing, since it’s not possible to get a reasonable Mac to do that work.

                                                                                          Anyway, what I actually wanted to say: on the hardware side I’ve had little issues with Linux, certainly not more than with Windows or OS X and at least with Linux (if I put the time into it) the issues can generally be fixed.

                                                                                          The following anecdote is not data, but as a lecturer I see a lot of student presentations. Relatively frequently, students who run Linux on their laptops have problems getting projectors working with their laptops, often ending up borrowing a laptop from one of their colleagues. Whereas the Mac-wielding students often forget their {Mini DisplayPort, USB-C} -> VGA connectors, but have no problems otherwise.

                                                                                      2. 2

                                                                                        Same. I don’t use them every day, but I do need Adobe CS. I also want (from my desktop) solid support for many, many pixels of display output. Across multiple panels. And for this, Windows tends to be better than Mac these days.

                                                                                        1. 1

                                                                                          The Windows Linux Subsystem is also surprisingly good. I would say that it offers just enough for most OS X users to be happy. Linux users, maybe not.

                                                                                        2. 1

                                                                                          One thing I’m finding is that a lot of Mac apps I rely on have increasingly capable iOS counterparts (Things, OmniOutliner, Reeder, etc.) so I could potentially get away with not having desktop versions of those. That gets me closer to cutting my dependency on macOS, though there’s still a few apps that keep me around (Sketch, Pixelmator) and the ever-present requirement of having access to Xcode for iOS development.

                                                                                        1. 5

                                                                                          Around five years ago while I was still studying, and still very green as a developer I started, but never finished an iPhone client for Lobsters. For whatever reason I’ve been messing around with that idea again over the past few evenings, and I already have a nice little alpha version I’ve been using on my commute to and from work. I’m building it in React Native this time, which I’ve been using for a while now and mostly loving despite more than a few warts.

                                                                                          1. 2

                                                                                            I had thought about trying that for Android, but the web interface seems to do everything I would want to do anyways. Did you come up with something that an iPhone client can do that the web client can’t?

                                                                                            1. 1

                                                                                              Mostly I just had a few UI ideas I wanted to play around with, but there’s a few things I’d like out of a native app::

                                                                                              • Ease of sharing links to other apps so I can quickly send links I want to read to Instapaper / Pinboard, maybe behind a swipe gesture or something
                                                                                              • Tighter control over my reading experience with support for night mode and the ability to show links in Safari’s reader mode by default
                                                                                              • A slightly more touch optimised UI. Lobsters actually does a really good job of this for the most part, but there’s some limitations to what you can do on the web versus in a native app.
                                                                                          1. 11

                                                                                            Sure, there are plenty of solid “9 to 5” coders around. Some people have no passion for programming, yet are naturally gifted for it.

                                                                                            However, one problem is recruiting. For every naturally gifted “pragmatist”, there’s a handful who have neither passion nor an aptitude for it. With enthusiasts it’s relatively infrequent you’d stumble on a total dummy. Perhaps that’s what is behind the GitHub participation interview metric (and the tendency to cheat that of course).

                                                                                            1. 10

                                                                                              I don’t think it’s fair to say someone who predominately writes code 9–5 isn’t “passionate”. There’s a difference between passion and singular devotion, and it’s entirely possible to be a good coder who takes pride in your craft while also, for the most part, pursuing other hobbies in your spare time.

                                                                                              1. 15

                                                                                                It seems like people are using the word “passion” in place of “competence”. You don’t have to be passionate to be a solid employee.

                                                                                                1. 3

                                                                                                  Yes, when I wrote passionate I meant passionate. I can be good and very efficient at cleaning, that doesn’t make me passionate janitor if by life circumstance I end up doing that.

                                                                                                2. 5

                                                                                                  I hope I will meet more 9–5 software developers who have a passion, who at 5pm can’t wait to see the end of the problem we’re debugging, who due to family/hobbies/whatever has to leave, but is yearning to get back the day after to together resolve the issue. These people and those for whom programming is their main hobby, they all inspire me and cause me to want to learn new things, figure things out, resolve issues and in general make things better. I hope I inspire others to do the same. :-)

                                                                                                  1. 7

                                                                                                    Well, hello there, I’m one. A passionate developer, who tries not to do work on my personal time. A few things to clarify though:

                                                                                                    • I believe you’re falsely equating the desire to end work at the same time daily with hating it. The former is just an issue of organizing one’s time that becomes more important the more responsibilities you take both at and off work. Coding without recess or sleep is usually a sign of a young person who can afford it physically. But it’s never efficient.

                                                                                                    • You don’t have to immediately shut off your work laptop at 17:00:00 to make it count. We’re not robots. When I have a few spare hours on a weekend I prefer not to log in to work and run tests I didn’t finish on Friday. I’m pretty sure Monday is going to be just right for it. But if there’s an occasional thing I think I can actually finish in half an hour extra work, I’m fine with it too. Just use your best judgment and learn not to slip into doing more and more work.

                                                                                                    • Dropping work every day at reasonable time doesn’t mean a programmer has no passion. It just means they have other passions, too.

                                                                                                    1. 1

                                                                                                      Hi, fellow passionate developer! :)

                                                                                                      I think I understand what you mean, but it is not about me thinking people hate their work. Perhaps it would be more accurate to say I might be “falsely equating the desire to end work at the same time daily with not caring too much about what you do”. What I’m looking for is the expressed desire or yearning to want to finish things, but having to leave for whatever reason. That is is enough for me, I’m not asking for people to sacrifice their family life.

                                                                                                      And I didn’t mean that one has to incessantly check one’s work mail or coding from home during the weekend, at the benefit of one’s employer (of course(!) one should get paid for the work, at all times).

                                                                                                      For me programming is not something I only do to get paid, I do it without getting paid too (own projects, or contributing to open source in my spare time). Hence I’m usually interested in what developers code or what tools they look into in their spare time when they are not limited to what the company, its development process, the project manager or the customers ask for.

                                                                                                      Sorry for not expressing myself more clearly. I hope my point comes across more clearly now, even though you might still not agree with me.

                                                                                                      PS. I don’t know so much about Chinese tea brewing, but I’m currently learning Chinese. :)

                                                                                                      1. 2

                                                                                                        Yes, it’s more clear now, thanks! Let me clarify myself as well:

                                                                                                        What I’m looking for is the expressed desire or yearning to want to finish things, but having to leave for whatever reason.

                                                                                                        The reason for leaving work at reasonable time is the acceptance of the fact that body and mind need rest in order to continue doing that work efficiently over a longer period. I don’t just cut myself out of it for the sake of not doing it. It wasn’t like that for me when I was in my twenties, but with age I learned that sweet spot of diminishing return when I know that pressing on for longer would produce too little for too much effort. So I learned to take my hands off keyboard and let my brain work on things in background, while I do my cooking/running/parenting/whatever.

                                                                                                        By the way, it doesn’t have to be exactly 8 hours. For myself I learned that I can’t really be in the flow for longer than 3-4 hours a day, with rare exceptions. And I’m lucky to work at a company that lets me manage my own time in this way.

                                                                                                  2. 1

                                                                                                    Sure you can redefine “passionate” to mean anyone remotely competent, but then we just end up needing another word for passionate, er, people who are interested in programming beyond their careers.

                                                                                                    1. 2

                                                                                                      I’ve beem thinking about this a bit today, so I’m going to try and distil those thoughts down here:

                                                                                                      1. Beyond a certain point in your career, a singular focus on code can become pretty limiting. The profession of software development encompasses so many different disciplines, and narrowly defining it as ‘writing code’ can lead you to neglect those.
                                                                                                      2. I write better code when I’m well rested, I’ve eaten well, and I’m in s good mood. One of the things I’ve had to learn to do is to cut myself off when it’s necessary; to not work ‘til 3am on that side project that I can’t stop thinking about, to go out and do stuff on my weekends and not feel like I’m wasting time I could be using on side projects. This one has been hard for me.
                                                                                                      3. Any job where you’re expected to tend to your professional development on your own time is a lousy job. I’m lucky to work at a company where we have time and money put aside each and e dry employee to spend on professional development, and I recognise this isn’t the case for a lot of working developers. But he point still stands.
                                                                                                      4. Often the concept of ‘passion’ and pride in one’s work is used by employers to justify things like unpaid overtime, unrealistic deadlines, and so on and so forth. I always feel guilty doing it, but sometimes the best thing to do is go home at 5, let your work wait, and not try to make unrealistic schedules work through Herculean will and passion.
                                                                                                      1. 4

                                                                                                        Beyond a certain point in your career, a singular focus on code can become pretty limiting.

                                                                                                        I find it interesting that you seem to see writing code as a means for career advancement. For me, the career advancement is the chore I have to manage in order to keep coding.

                                                                                                        1. 2

                                                                                                          Can’t really object to any of your points, but I feel none of them has much bearing as to whether someone is passionate about something or not. My mention of passion wasn’t an attempt to guilt-trip, am perfectly OK with professionals who just do what they paid to do without consuming interest in the trade.

                                                                                                  1. 1

                                                                                                    I personally prefer Flow over TypeScript, but the general idea of adding types to JavaScript is something I’m all for. One of my favourite things about both of these tools is being able to, for example, change the shape of my Redux store and then follow the errors Flow/TypeScript generates to find every part of the codebase which that change affects.

                                                                                                    1. 2

                                                                                                      How are you finding flow+redux?

                                                                                                      I spent >30 unsuccessful hours trying to get connect to return a useful component with the right Props (and learned all the secret/experimental features doing so).

                                                                                                      I’d like to try TS on my next project; flow has burned me by being silently unsound.

                                                                                                      1. 1

                                                                                                        Yeah react-redux’s connect() HOC is the one place where I’ve never had much luck with Flow. The main issue seems to be an underlying issue in the Redux library definitions, though there’s a PR to fix those which I haven’t tried myself https://github.com/flowtype/flow-typed/pull/1731

                                                                                                        Edit: Just threw those new definitions into a medium size project and they work great. Even helped me pick up one or two subtle bugs.

                                                                                                        1. 15

                                                                                                          Glad it worked for you.

                                                                                                          That said, the thought of using two-day-old code from an open pull request is reminding me why I’m trying to avoid the front-end space right now.

                                                                                                          1. 2

                                                                                                            I want to upvote this a thousand times.