Ask HN: Best Linux Distro for Development
I'm strongly leaning towards PopOs since I like Debain support, but Ubuntu is turning into Windows ( cloud services, telemetry, etc).
Given the absolute nightmare of Windows Recall, I opted to buy a 8845HS laptop instead. I plan on installing a nice 4TB SSD as well, with about 500 GB for Linux - I make tons of music and this is better supported in Windows.
I really enjoy Manjaro, but I find it's much harder to get working with certain software working.
I'm going to be developing embedded applications, flutter apps, and maybe some Android.
My main concern is speed, what's fast, what's not.
However, I'm also open to smaller niche distos, feel free to pitch your passion project!
57 comments
[ 64.4 ms ] story [ 1123 ms ] threadSo why not just Debian?
Most developers I know use either Debian, Fedora or Arch Linux.
I'm not too into tweaking my os.
For installation, use a tool like Rufus to make a bootable USB drive.
Use https://cdimage.debian.org/debian-cd/current-live/amd64/iso-... - KDE is a desktop environment that will feel pretty familiar if you are used to Windows.
Rebooting into the USB drive, you can try out KDE, or can go straight to the install process - it takes less than half an hour, even as a beginner, and if you don't understand something, just click next and it'll be fine. There's a graphical partitioning tool included in the installer. If you don't need everything to be FOSS, you can select non-free repositories to make some proprietary software easier to install. These aren't officially part of Debian, though, so remember that you can't get support on the Debian forums/chatrooms/bugtracker for proprietary packages.
At the end of the day, stuff in PPAs is just .deb packages, so it may be possible to just install them in Debian. That said, I've never had to use a PPA in my life, the default Debian archive already has basically everything.
One final suggestion is to simply look to see if Debian already has a piece of software when people suggest using a PPA. Some developers don't like Debian (for instance because Debian disables tracking code by default) and recommend PPAs when you don't actually need them.
P.S. 'PPA' is a Ubuntu term, while Debian tends refer to 'third-party repositories' instead. Luckily, they are exactly the same thing!
https://wiki.debian.org/Steam#Installing_Steam
I think I'm convinced, I'll try Debain and if it doesn't work I can always go back to Mint.
Last time I had to play with the system a bit, was when pipewire was introduced, and I had to create a config for it to nicely connect to my bluetooth earphones. I guess that was 3 years ago.
Some of them are debian-based.
You can still get the cosmic desktop of Pop OS in another distro if you really want it.
For immutable in general, Fedora is probably the most refined. Their GNOME spin is the most well-known and is called Fedora Silverblue. But they also offer KDE, Sway, and others atop their immutable infrastructure. I think you can get basically all major desktop environments.
Here is a non-exhaustive list:
https://fedoraproject.org/atomic-desktops/
The key here is that you would install almost all your applications via flatpak on the home partition, and the system partition would be very locked down except for the system updater tool.
When the system is updated, however, you would be able to tag as many snapshots as you like which would be like git branches for your system. Each could have different kernels, system libraries, etc.
If a system upgrade goes bad, you would be able to go back to a previous one. The last two will be saved by default, and you can save as many others as you like. Which would all be efficiently stored and de-duplicated via ostree
And your userspace would essentially be preserved as you switch between system snapshots, because it is on its own partition.
https://docs.fedoraproject.org/en-US/fedora-silverblue/insta...
I'm going to think about this, I've had great experience with Linux Mint ( it's still Ubuntu but less junk).
[1] https://universal-blue.org/
My advice is to stick to one distro over a long period of time so one can become familiar and comfortable with it.
And the Open Build Service, while not as big as the AUR, still holds a ton of applications.
As for why I believe OpenSUSE is great for daily driving:
Tumbleweed always receives the latest packages from upstream development. This means that the distribution is guaranteed to work on the latest hardware and benefit from patches for optimal performance. As an example, Tumbleweed gained the optional x86-64-v3 packages while Arch, Fedora still lack these optimizations. On top of that, it also outperformed other distributions including Arch in various benchmarks.
Btrfs with Snapper can be utilized so the system can be rolled back to a working snapshot in case an update breaks anything. Which leads on the further point...
Packages are tested through OpenQA before they are distributed, ensuring that updates are stable, and if they pass the extensive QA, it ships automatically. So in most cases, OpenSUSE often gets the latest versions of software hours to days after upstream publishes those changes. On Arch, it took over a month for the maintainer to update GNOME 44.
OBS - The Open Build System which is similar to the AUR allows anyone to create and publish packages not found in the official repositories or packman. IMO this is a better approach to COPR or the AUR as they still go through openQA to detect problems with compilation.
OpenSUSE is desktop environment agnostic. GNOME, KDE, XFCE, Cinnamon etc are all a priority and receive the same level of development. Other distros have been known to have weird quirky behaviors on certain DEs that doesn't seem to be an issue here.
Zypper is probably the most cohesive feature packed package manager out there. It can seamlessly change vendors to a different package source to avoid dependency/system breakages, provides solutions on conflicting packages and much more.
OpenSUSE combats software problems in smarter ways than other distributions. They have extensive backports for almost everything from the kernel,X11,firmware,KDE etc all of which is provided officially and not from third party developers like Ubuntu PPAs. This way, the software installed from SUSE directly can be trusted.
YaST is an amazing system configuration tool that allows you to administer the installation with a breeze. IMO this is one of the greatest selling points to this distro, and it never disappoints.
Security - OpenSUSE is more hardened by default than Arch/Fedora/Ubuntu, meaning it can be trusted and dependent on. If you value security highly, it remains of the best options for security conscious individuals.
All in all, OpenSUSE Tumbleweed/MicroOS are the best distributions available in my biased opinion. Combine this with the long track record of SUSE making solid distros, it simply cannot be beaten for desktop use.
NixOS has a very interesting approach of having a (smal set) of config file(s) to setup an entire system as it was. Too me as a developer this is very appealing, because I don't need to care too much about backup up the OS or settings, but only the config files and the files in /home/.
I would also add docker, this helps a lot with development. Oh, and if you need a VM (e.g. Windows) stay away from Virtual Box - just use qemu, which runs the VM up to 300% faster.
I use it for webdev and playing with some embeded dev, and anything else that is not gpu-intensive. But 64gb of ddr5 is like $150 these days, very cheap just get that.
I'm very strongly leaning towards Linux Mint. I'm not sure if the Ubuntu flavors have the same advertising as normal Ubuntu.
That was like two years ago, maybe two and a half now, and I'm still running PopOS. I really have no complaints. It just works, and the repos have pretty much everything I've ever needed aside from really niche stuff that's never in distro repos.
I work with Debian and i3wm, but that's because I'm familiar with both and my software needs are minimal. Debian is pretty stable, but barebones. Everything you install will work, but you may as well go with Linux Mint Debian Edition if your endgoal is similar.
Fedora and OpenSuse are other candidates for well supported distros, without doing all the work like with Arch Linux.
I really want to develop for raspberry pi as well , which is infinity easier on a Debain Distro.
I'm probably going to use Mint again, but I'll consider other Debain distros.
None of the other AI features are too appealing to me.
I'm hoping they remove this junk from the OS after a few years since I don't see Linux ever maturing in terms of music production or *most* multiplayer gaming. I still need windows for alot of things.
Then I agree with Mindcrime: Try PopOS. It's very easy, it's full-featured, and it makes installing software easy.
- My Asus laptop couldn't sleep or hibernate. It would just be fully on, or shut down. This wasted a lot of battery.
- The wifi reception was always too low. I needed to be very close to the router or couldn't establish a meaningful connection. This was not to inconvenient as I use the same desk always.
There were many other minor issues, too.
So, I left PopOS about 8/9 months ago, and jumped to Ubuntu. These problems went away. It works perfectly.
Only problem is they showing me Ubuntu Pro ad on every sudo apt upgrade. Other than that it's really good. Absolutely zero problems or inconvenience. No need to babysit it. I have zero problems with NVIDIA drivers. It is as convenient and worry-free as Windows or MacOS.
I used Linux Mint when I was in college. It is another no-BS, no babysitting needed distro. But it sometimes gave me driver problems which I needed to fix.
I also used Manjaro for a while. It's a good one.
You could use Kubuntu. It is Ubuntu with KDE as the DE. It has really good graphics.
I'm leaning towards Mint atm.
Sorry what is it about Windows Recall?
The things you mentioned might be useful in their own right, but don’t really seem as critical to development as e.g. being able to install non-Nix library dependencies or deal with legacy software, which is made more difficult by a system like NixOS.
Having used it for a couple years now, it’s hard to express how much more comfortable I am hacking on parts of my system I don’t even understand that well since rollbacks are trivial & patches can be declarative so I can run those upstream fixes or patch things I don’t like without worry. On other distros, had I bothered to compile something for a patch rather than just waiting (or hoping) for it, it wasn’t easy to maintain new updates to that package while maintaining those patches & it was a real hassle to manually compile it. Versus Nixpkgs where I update & if there is a new package version it automatically gets recompiled according to the patches I have declared in my system’s config.
These same principles apply to development as well. Once you get the hang of it, you can customize any environment just like your system. It feels weird to value Nix in a development environment & not see it as useful for your system. …It also helps that Nixpkgs has more packages than even the AUR (that said, AUR being self-hosted is great instead of relying on Microsoft which throttles me all the time).
I also think the tradeoffs are worth considering. You lose a few things by using NixOS:
* ability to run/depend on non-nixos software (without packaging yourself)
* you have to use the declarative config system, which can be annoying and slow if you want fast iteration to get something working
* Patching support is nice, but I don’t really have a use case for it generally for system dependencies (which I like to keep relatively lean, and close to distro upstream). For a development dependency, it may be different but you don’t need NixOS to benefit from patching there (nix shell is good)
Moreover, especially with nix shell (for project dependencies) and home-manager (for user tool configuration), I rarely have a need for software installed globally. I use Debian and the only system level things I configure are automatic updates, backups and Prometheus. Systemd config is already pretty declarative, which only really leaves user management as something that could be more declarative. You can get a pretty good setup using a bare git repo version controlling /etc, without needing all the extra complexity of NixOS. I keep a ~50 line text file with rough instructions and a list of packages.
I guess it gets a bit more complex if you run a gui desktop, but these are generally very well-trodden paths in big distros and fairly streamlined. I haven’t used desktop NixOs, but given the shitshow of desktop Linux, it seems like something that may get complicated in Nix?
The familiarity argument is reasonable, but also NixOS module system is pretty radically different to Nix the package manager/build system, so it only partially applies. Even adding home manager to the party, only the base concepts of the module system really apply; you end up having to relearn a set of new modules.
To sum up:
* It becomes way more difficult to do common development-related stuff that you may need
* The majority of the development benefits can be achieved without NixOS.
* The flexibility of being able to opt to use Nix and the degree to which you do so (either just shell providing dependencies, or whole the build system being Nix, or even using something completely different) or not is also something that may be very useful for development.
* The familiarity argument is decent, but it’s different enough that you basically have to learn a lot of stuff independently.
They are not on the top with compiler optimizations (based on phoronix benchmarks) but are fairly close, probably because they tend to trade security for performance.
If you want things to just work I recommend using one of deb or rpm distributions as you can count that those will have official packages for anything you might need
Linux Mint is probably the only exception I'd make to this rule, because they have been around for long enough and have proven themselves to be stable.
I am not familiar with the Android development ecosystem, so if you are in need of relatively recent packages (<1 year old) the most suitable distros would be rolling release distros like OpenSUSE Tumbleweed and Arch (although that one requires quite a bit of setup).
Stay away from Manjaro and Pop as they have a history of breaking packages, and in the case of Pop not contributing upstream and causing drama.
Further to that, if you intend to use valgrind as part of your development workflow, note that valgrind sometimes stops working on Manjaro and languishes that way for months. For complicated but ultimately boring reasons that you can research for yourself, the issue isn't resolved by reverting to a previously working valgrind package. I was on the verge of switching from Manjaro to Arch for that reason but lately it started working again so I'm giving it a reprieve. If I were starting fresh I'd use Arch.
I'm currently using PopOS, an Ubuntu derivative, and like it. The built-in tiling window manager is a killer feature. I loved using i3, but hated manually fiddling with things like networking configuration. Having a tiling window manager built on top of Gnome is the best of both worlds.
https://www.reddit.com/r/pop_os/comments/1ah339f/comment/kol...
https://blog.system76.com/post/cosmic-the-road-to-alpha
In my opinion don't look at Asahi Linux based distros. Too much configurability and sometimes you just want to code. That's including Manjaro Linux since it's almost like Debian only with pacman and with even more bloat.