I know there choice of distro is really meaningless as you can install almost any program on almost any distro. But I have been playing with kali which is for security people and pen testers. Is there a similar distro for programmers? Like a few ides installed some profiling tools some virtual environment tools etc?
Yes, all of them.
kali is for posers, professionals use hannah montana
The truly righteous use TempleOS.
Not that I know of, but I kind of feel like Nixos could be. The way you can use nix flakes or shells so each project has its on version of nodejs, go, rust, or w/e you use. Instead of having them installed system wide. And you can put the flake.nix and flake.lock in your git repo so any other Dev with nix can use it to DL the exact same packages.
UNIX was kinda designed to be an IDE (of its time) by itself. Desktop/Server Linux (whether GNU or non-GNU) mostly continues this tradition; you are provided with some powerful tools for text manipulation, development, debugging and deployment out of the box in most distros. As such, any modern Linux distro is pretty good for development even out of the box. However, you must learn to use this power, and I’m not claiming it’s easy (I still regularly look up various manpages despite doing development on Linux for 10+ years in various forms).
With that said, I myself prefer NixOS. It really feels more developer-oriented that other distros, as you get the power of Nix out of the box, and integrated into the system. With Nix you get easy access to the biggest software repository in the world. You get per-project development shells, so that you never have to worry about different toolchain versions for different projects, or your system being contaminated with bloat you no longer need. You get the power of reproducible packaging, to eliminate a lot of (but unfortunately not all of) “Works on my machine”-type of problems. It’s also got a hell of a learning curve, but I think it’s worth it.
I feel like there’s just too many different programming workflows, to try to pre-install them.
Here on openSUSE, there’s ‘patterns’ you can install, which are basically just groups of packages, and they’ve got some pre-defined patterns for programming:
I feel like that kind of goes in a more useful direction, although it’s still partially questionable what those contain. For example, the Java development pattern comes with Ant as the build system, when Maven and Gradle are more popular, I believe.
I also have to say that I often prefer installing programming tooling in distro-independent ways, and ideally automated in the project repo, to avoid works-on-my-machine situations.
Of course, something like Git, Docker, VMs etc. tend to be stable across versions, and I might not care for having the newest versions, but even with those, I think it’s good to install them on demand, rather than having them pre-installed. If the distro simply makes it a breeze to install them, that’s ideal IMHO.In my view, you need a distro that has up-to-date packages. It also helps to have repos that have all the obscure tools you are going to want to ensure compatibility with everything.
Those two criteria eliminate a lot of distros. Arch or an Arch derivative like EndeavourOS are my picks for these reasons.
Distro packages don’t really matter much in my experience. You either use project-specific package management or install stuff with Homebrew or Nix package manager. Sometimes maybe even containers.
One problem with distro packages is that you can only install one version. And in practise a lot of software projects have outdated dependencies. Sometimes you have multiple projects with conflicting version dependencies.
Well, now you are hitting on my real recommendation which is to use Distrobox. Distrobox allows you to install multiple userlands that are all isolated from each other but all seem native on your system and give you full access to shared files and resources ( even the GUI desktop ).
It is very common to work on something not that just has outdated packages but that targets a specific distribution. If you are building something that will target an Alpine container in the cloud, it is handle to create an Alpine Distrobox to have all the same libraries. Similarly an app might target a specific version of Ubuntu. One of the products I worked on last year was based on Ubuntu 18.04. I could easily create an Ubuntu 18.04 Distrobox to work on that.
Distrobox also means I can prevent the build-up of cruft from all the little specialty tools and dependencies that projects require that I will not need long term. Remove the Distrobox and remove all the junk.
This is different than pure Docker to Podman though since Distrobox still gives you full access to your base system. You only have to install what you uniquely need in Distrobox. So i am not necessarily installing all my tools in Distrobox. Just the specialty ones.
Anyway, this is a more complicated answer and setup. In my view, the host environment still matters a lot and what I said above still stands.
Heh, Distrobox came to my mind when writing my comment. I haven’t used it enough to recommend it yet though.
I recall there are some other development container projects, but can’t remember the names right now.
Development containers are nice in theory. In practice, sometimes development environments are so complex that it might not be worth the trouble. But it’s good to have options.
I’d say ArchLinux/ArtixLinux, because of the ease to publish/install packages to/from AUR (Arch’s User Repository).
I’d argue… Alpine?
Why? Well, because it’s small. So Alpine isn’t the programming distribution itself but rather the distribution for the container your run whatever you build inside of just because it’s very VERY small (like… 5MB?!).
Obviously that makes sense only in some cases. For example for a frontend Web developer or a game developer (or a WebXR dev like me) it might not help much but otherwise,… maybe?
Anyway if you are into this kind of things check also Gitpod, it’s about wrapping your dev environment inside a container then having it anytime, anywhere, including for other developers and facilitate their onboarding.
Not disagreeing, but if you’re just looking for a small Docker image, might as well build a static binary and ship it without any distro at all. Or, if you really need shared libraries and other dependencies, you can build a docker image with Nix and not get anything other than the dependencies.
Gentoo. Literally the entire system is a build environment. Imagine a single environment that’s capable of compiling thousands of different packages and managing dependencies etc.
NixOS. It’s really good for building multiple discrete environments specific to a development project, and it’s done via a functional declarative language that’s right up a programmer’s alley. You can specify everything precisely to what you want for that environment including all dependencies and not have them pollute each other when you switch builds.
But it’s a steep learning curve and the documentation could be better, but it’s probably fine if you’re used to learning new languages.
Well, not exactly. Any distro COULD be used for development and excel at it, but there are a few intresting options out there. I personally use Fedora with KDE, but if you want to take it to a more advanced level, use arch or nixos. If you want to make your OS, use gentoo or linux from scratch, but very niche and not recommended.
Not that I know of. I do a lot of native development mostly on Mint and Endeavor. I use pretty much the same tools on both and get a nearly identical experience. I’d say just go with what feels good to you.
I think you’re better off finding tools which work for your particular language, application, workflow etc. For me I use nix and direnv to create directory based declarative package sets that load upon cd’ing to a project’s folder. This allows me to have exact versions of the packages I need regardless of system packaging or versions used in other projects. Some people prefer spinning up containers for this role, often using tools like distrobox. If the language you’re working in has good version management tooling then you can also just use that
Not out of the box that I know of, no.
You’d have to be specific about programming to have a programming specific distro.
There’s nothing like it, nor will it ever be, for a couple of reasons.
Programming is a long running task
Distros like Kali are meant to be used for quick tasks where you don’t need data preservation (or when data preservation is a bad thing). Programming is the opposite of this, it’s only about data (the program) preservation. Programming something that will get erased on the next boot is pointless on the long run if you need to program that again, and if you don’t then what you’re doing is not programming but something else that requires some programming.
Programming is a wide term
There are multiple languages/IDEs/Workflows/etc, ranging from fully free and open source to paid closed source, whichever you will use depends entirely on you, having all of that pre installed would be 99% garbage since you will only care about 1 or 2 of them.
Programming requires setup
Even if you had whatever workflow you use pre installed, to work on something you would need to setup git keys, install dependencies, compile the first version, etc… and that’s all before you can start doing stuff. And you would have to do this again and again since distros like Kali are not meant to be installed (if they were they wouldn’t need to come with all those packages pre-installed because you could just install the ones you cared about)