How new Linux users can increase their odds of success
drewdevault.com
drewdevault.com
But most of the OS code is maintained in such a way that only a small group of motivated users would be willing to fiddle with the build infrastructure necessary to even attempt modifying any of the core functionality.
That, along with the long wait times of recompiling, is functionally equivalent to burying entire process of "modifying or improving to suit needs" behind a blockchain. E.g., you have to walk awkwardly through a tarpit to arrive at the modification. (Hint for Blockchain Fans-- that's a bad thing here.)
It would be neat if there were a distro that shipped with all the build desiderata in place. So that I could at least go into ls.c or whatever and add a printf "all your base are belong to us" line and have it just incrementally recompile that single command.
Bonus points for a browser repo that could do that. Let me add a menu option that reads, "Poop" in less than ten seconds. (Btw-- how are incremental builds for browsers? If someone wants to printf their way through a bug, what's the recompile latency like?)
Edit: clarification
If you really want to have everything rebuilding from source at your fingertips, you could already do that with gentoo and similar. Patching upstream sources and rebuilding is pretty trivial there if that's your thing. There are more to choose from.
You probably won't be having the build infrastructure of all your packages "ready" all the time though, and things are taking a turn to the worse due to dependency bundling where each package has it's own independent copy.
To be fair, there's Linux From Scratch, but I found it to be a bit tedious to build out everything and manage the dependencies by hand. Walking through a big dependency DAG manually is not very practical IMO.
There's also Nix, but I am yet to learn how to work with custom patches there. I believe that it's possible, and Nix has a lot of other great features but hasn't been exactly Gentoo-like in my experience.
No experience with Guix, but its ideas sound very interesting.
I don't want Gentoo.
I want Gentoo that has been prepared as if the user just recompiled every goddamned program that makes up the core os, build desiderata and all waiting for me to make another change.
So if I decide I want to recompile coreutils after messing with a single implementation file, `make` or whatever will just incrementally recompile what is needed.
Another way to think of it: (I hope) all coreutils devs have a dev environment they use where they can make such a change and have very little latency from the moment of a code change to the moment they see results from running/testing the command in question. I want a distro that delivers code and source in such a way that the code of all core programs is just waiting for me to incrementally rebuild any of those programs.
And that wouldn't even really suffice-- there are probably some core programs which still have long incremental recompiling times. Digression-- I'd bet all the browsers are such examples-- in fact I'll just claim it here in the hopes that the internet gods strike me down. :)
Edit: clarification
You likely don't want that. You can expect compiled objects to be in a 10:1 ratio compared to the final build size. Rust is closer to 30:1 in my experience so far. Then you have projects that vastly exceed that.
As a dev, I'm constantly struggling with disk space with just the projects I'm working on.
This doesn't even begin to handle the issue of contained/reproducible builds.
And with things such as LTO, you might be waiting at the "linking" step way longer than what you might think.
I don't think you realize how GOOD gentoo makes it already, considering all the variables in question. You can rebuild and patch the entire system, from start to finish, with a single command. Take a moment to appreciate this fact alone.
Don't taze my fantasy, bro!
As it stands, OP's shorthand of "anyone" expands to "anyone with enough free time to slow smoke an entire pig" for a large class of programs. That's blocking a lot more participation and limiting the upshot of OP's rhetoric.
If someone builds a thing where I can fuck around in FF codebase and see the results in less than two minutes, "anyone" suddenly becomes a lot more meaningful/actionable.
In my experience - this is a bit painful. I got my Ryzen machine to build FF in about 20 minutes through very liberal use of build caches, 40G RAMdisk and making the build process have priority over everything else. I doubt that sub-minute builds are possible on easily accessible hardware, but I would love to be proven wrong here.
Interesting-- is the 20 minute duration for a full compile from scratch, or for an incremental recompile?
Not sure. I'm new to writing comments on Hacker News, perhaps I broke some unspoken etiquette rule.
> is the 20 minute duration for a full compile from scratch, or for an incremental recompile?
I believe it was the compilation time for a X -> X+1 version upgrade. I've been using precompiled firefox-bin for quite a while, so X could be ~70. I think it would be interesting to test and see those numbers on a modern version of Firefox.
That's absolutely not my experience. On Debian distros I just grab a .deb source and can work with it in the exact same way regardless of which OS component it is. Similarly on Arch with its PKGBUILDs, and I assume other distros have something equivalent as well.
I agree with the rest of the post though.
One time, an old thinkpad started shutting down unexpectedly due to a bad thermistor reading. I was able, in a few hours, to patch the kernel to ignore it, thus extending the life of my laptop for years beyond would have been possible in windows.
The benefit of ability to edit your own source code is real. Maybe rarely needed in practice, but linux is all about the long tail.
> 1. Learn how to use the shell.
> 2. Find and install packages from the command line.
> 3. Try out a tiling window manager, especially if you consider yourself a power user.
> 4. Compile a program from source.
At this point, the author would have surely alienated the vast majority of users potentially interested in Linux.
I would venture a guess that even most engineers who use Linux at work (i.e. on their laptop) don't know what's a tiling window manager (since it's an implementation detail).
This article feels like it was written in 2015.
There's Ubuntu, ElementaryOS, Zorin...
They're not for me though, as what I care about is pretty contrary to the idea of mainstream. I don't really care whether Linux makes it to the mainstream or not, why should that be everyone's goal?
The lack of a unified direction might seems like a weakness of Linux but it's also its biggest strength. It's the reason it's the most used OS in the world now, when you include servers and Android devices. It's just so easy to adapt if you want to do something different.
So let the techies do their techie stuff and let the mainstream OS vendors focus on their users :)
The current state of desktop Linux is that there's a category of Linux software that is suitable for beginners, which is built atop the set of features that make Linux excellent for the people who put the amount of time into learning the operating system that is appropriate for learning a professional tool. But this category of software (the GNOME and KDE desktop environments and 3rd party software intended to run inside one or the other) doesn't do much to ease the process of learning the deeper, more compelling aspects of Linux. It provides you with an interface that's recognizable to Mac and Windows users, but doesn't provide nearly as much power, and then expects you to learn Linux in all its depth to make up for that difference in capabilities.
That makes Linux great for people who just need a web browser and maybe an email client, and it makes Linux great for people who have enough background technical knowledge to learn all its depth, but leaves it vastly inferior for everyone who needs more than a Chromebook but doesn't need a professional tool. If you fall into that category today and want to use Linux anyway, you need to learn its depths, and expect that until you do, it will be worse than the OS you're coming from.
If we want to improve the situation, we need either go all the way and make GNOME just as powerful as macOS (which is a fools errand), or make GNOME better integrated into what Linux is already great at and ease the transition.
- It improves discoverability for any given app’s functionality immensely, as the menubar acts as a universal searchable index of functions
- It provides an easy way to see the key shortcuts for any function
- It provides a hook-point for the system to allow the user to set custom key shortcuts for any menu item in any app, even if the app’s developer never provided that capability
GNOME is pretty great in a lot of ways but its phobia of menus can be grating as a power user.
I doubt they ever had the strength to push for a osx-style global menubar (or this hamburger menu thing) for the whole desktop. Too much fragmentation, too many toolkits, too many partners pushing their own user experience.
As a multi-OS user of 20+ years and developer of 15+ years they’ve never worked well for me. A more traditional floating WM with light optional tiling functions (think Aero Snap or Moom/Magnet/etc on macOS) has been more productive for me. With tiling I always end up with some windows being oddly sized and unusable, or half my windows being in floating mode which defeats much of the point of a tiling WM.
with WinGet, and other things moving to windows, I likely would be recommending windows users do 1, 2 and to a lesser deg 4.
Windows users should be learning powershell, windows users should be leaning WinGet and/or other nuget based package managers (i.e Chocolatey), and windows users should maybe not compile from source but learn powershell scripting .
There's powertoys that offers quasi-tiling wm experience:
Terminals and shells are overrated. Most popular shell languages are terrible as programming languages, and if you go for a less popular interactive shell then you will “ruin your muscle memory” or whatever for when you have to SSH into a Linux “box” (as they call it). (A lot of new tech on Linux is immediately suspicious because “[I’m a sysadmin and] this won’t work on this 30 year old Unix variant”.) The terminals themselves are just 70s technology and you might have to use another layer on top of the terminal (multiplexer) in order to do simple things like copy (to the clipboard) the output of the previous command—it’s not an integrated experience at all.
And Mac has terminals and shells as well. Although I guess a different (probably better) default shell compared to many Linux distros.
Tiling window managers are great and a great concept. But they often come bundled with yet-another-multi-weekend configuration campaign as you have to set up basic, simple things like date-and-time and the battery level (and often in a bad/unaliased font as well… because some users might be running their window managers on potatoes).
Maybe Linux is too much of a configuration-sink for people like me. But I ended up on it for whatever reason.
Could not agree more, and my hobby is writing those shell scripts in a DSL that is very close to bash.
To me the main benefit of terminals and shells is the composability of utilities that are built to run in text-only environments. Daisy-chaining tools together on the fly is immensely powerful and just not possible with GUI based programs.
What you're describing is the benefit of an open system. You _can_ customise it. You don't have to.
Sounds like nothing has changed in 20 years.
Installs by terminal are also frustrating, e.g. if they give me outdated versions (e.g. nodejs is easy to install ob Ubuntu but several versions outdated) as I just don't know enough about what's going on to get it right. For non-experts like myself the lonher I run linux and the more i do stuff through the terminal with my half-knowledge, the more I seem to create an ever growing list of confusing installs and structures I dont quite grasp...
That could be so, although I'm in the opposite camp: MacOS is the preeminent operating system for me because it does the best job of getting out of my way and letting me work.
I have no idea how to configure sound drivers on a Mac or what my current filesystem is (some version of APFS or something new?) because I've never been forced to learn as a prerequisite for getting work done.
Also, just to compare apples to apples. If you buy a laptop with macos or linux preinstalled you of course have to do nothing because someone else did it for you. Install macos on a dell laptop and tell us how easy that was.
what makes you say this ?
That's the trade-off I've chosen: MacOS is guaranteed to work well on my laptop because they were designed and built together, for each other.
Put another way: the fact an apples-to-apples comparison to Linux is impossible is the reason macOS wins for me.
If I can use it without ever having to know which boot loader I'm using (or what a boot loader is), what version of a given driver I have installed, which partition I'm writing to (or what a partition is), whether I'm currently logged in as root or as admin...
... that'd be comparable to MacOS, and it definitely opens the door to me switching to Linux if/when Apple takes a dark-enough turn.
Now one might argue that every professional user, especially a programmer, should know what a boot loader is or what partition they should be writing to, since that's as basic a requirement to use a professional tool as touch-typing is.
But I wouldn't agree with that; macOS abstracts away a lot of basic things, and that's why I like it.
Sure, they have problems specific to them (e.g. losing encryption keys, some WiFi sticks unsupported by policy), but every ecosystem has rough edges you won't find elsewhere.
BTW, there are more Linux-focused companies. Those two are just the ones I remember from the top of my head.
Everything does that now.
People only care about boot loaders if they want to dual boot Windows, and in general the extent of caring about it is to confirm when the installer asks if that's what you want to do.
Linux attracts the kinds of people who want to know what a boot loader is, because it makes that easier than alternatives do. But it's not actually required to use it.
Sure, it is super nice to have the option of running it on almost any hardware, but as you said, if you don't want to do any tinkering, you need to buy the right hardware. If you want the corporate guaranteed experience, you need to buy it from a company that offers that. Lenovo and Dell offer machines with a Linux certification, but that seems to be more of a "we think it should work" sort of situation. That is good enough for my personal use, but my next work computer is going to be from System76.
That said, a lot of what makes me effective at my work comes from many years of breaking, fixing, bending and molding Linux to my personal and professional needs; from understanding filesystems, their pros and cons, from compiling the kernel with different options; from compiling software from source in order to get an obscure library compiled in so my GPU would be accelerated, etc.
Granted, the entire Linux ecosystem is much more stable these days but those were good times for learning about computers just trying to get your own computer to work. :)
The laptop lasted a couple of years before the motherboard failed. That hard drive is still going and hasn't had a single corrupted file.
Rather than teaching a new desktop, teach things where Linux excels server-side. Eg. Setup a Pi-hole
I use both win and macOS desktops at home and will not replace them any time soon with Linux, but have far more Linux devices for things like:
- Pi-hole - homebridge - minecraft servers for my kids (with crafty) - Plex - Timemachine (netatalk + zfs) - photoframes using raspberry pi zeros + old cheap monitors
But there are tons of great, interesting, education use-cases.
I’ve found I only learn when there’s an interesting project with a rewarding goal. “Learn a new desktop” isn’t defined enough to stick. Spin up a usable new server proving a clear function is.
Because this is what they are familiar with.
I have on numerous occasions encountered a task I need to repeat on Windows with a GUI application and cursed to the heavens that there is no way to automate the task, incredibly frustrating.
-- Yes yes, Powershell, but it doesn't do everything. Plus, all the commercial software available, chances are it doesn't have any such feature/plugins.
I would LOVE for gnu Linux distros to have an amazing experience that delights people. First, people need to stop blaming the users who struggle with things. That includes telling them to learn some technical incantations or criticizing them when they don’t. That’s just covering up user experience issues in a design that needs work
- Use all-Intel hardware
- Use a laptop that comes with Linux (includes some Dell XPS series laptops and ThinkPads)
- Install Ubuntu and don't change anything via the terminal
Then Linux is every bit as easy and solid as any other OS, if not moreso.
Though really I haven't had any serious hardware problems under Linux for years (but I have a small stable of machines I am not changing all the time).
Intel makes everything and is known to have good Linux support. You can buy a system where "lspci" lists nothing but Intel hardware, and that system will run Linux well.
So will many other systems. AMD CPUs and GPUs in particular are good. Nvidia not so much. The vast majority of network adapters are no problem, but a few stupid ones do exist.
But it's easier to say "just get everything Intel" than to enumerate the entire hardware compatibility list.
AMD is pretty good these days, it all mostly works. Few bugs now and then. Intel everything is super solid.
GNU+Linux worked just fine back then, and it still does now. KDE was already a thing. To start with computers, I'd recommend the GNU Manifesto. Free software is important. These days, anyone using a computer without a FLOSS operating system on it is just ignorant. There's been TV ads. CDs by mail were free. There are magazines. Arch has a wiki.
And to those who are willing to make their computer work for them again: welcome to the FLOSS community. Hope you enjoy it!
(IMHO) This was hardly because of "programmer's desires", but because Valve desperately needed a fallback solution in case Microsoft is turning Windows into an iOS-style walled garden (and this was a very real possibility in the Windows 8 days, and probably will become a topic again depending on which "clan" at Microsoft has the upper hand). Before Valve got involved, "Linux gaming" basically meant getting Tux Racer to work.
And if you're old school, xpilot. It was probably the apotheosis of Unix gaming, in that it required a giant rc file to actually be fun.
1. Command line argument expansion is limited, so at some point you need tools like xargs which is far from perfect. This is strange on machines with gigabytes of memory.
2. Running "su - user" does not forward X. Messing with xauth is an unnecessary nuisance.
3. The unix tradition of piping commands is great. Extensions like Gstreamer are essentially using pipes but they use their own kind, which is awkward.
4. A modern linux desktop system uses a bunch of services, which are glued together like a microservices architecture. This has its problems; see any thread on microservices on HN.
Disagreed. Windows is just a system with most users, so games developers target it most.
Linux is just fine for gaming.
But from the perspective who wants games to Just Work? I'd like it to be otherwise but Windows still owns that.
I daily drive Linux, and do 95+% of my gaming on it - I just also recognize that it is an 'unsupported configuration'. It works well enough for me and for many/most people, but it will never be as 'out of the box' as Windows, until the fabled Year of the Linux Desktop arrives.
Download your free copy of Debian. Install it. There, you're done.