Because it sometimes seems arbitrary which software i like and which i dont, i’ll try to outline what things i look for when making such judgements.

Also, before evaluating software, step 0 is to check if the problem can be solved with pre-installed software.

Things that make me interested

  • function that can be well explained by several paragraphs of docs (runit, mosh)
  • portable interface (like unix pipes or command line arguments)
  • high portability due to simplicity
  • focuses to solve a single (possibly complex) problem (mosh)
  • has bugfix-only releases (like linux kernel)
  • development pace looks like its finished, no reason to wait for a next, “better” version
  • has clear migration paths away (opposite of vendor lock-in)
  • has documented and well defined behavior for error situations
  • correctness over quick feature-hacks (musl libc)

Things i avoid

  • cargo-cult buzzwords like “modern” or “DevOps”
  • lack of manpage / offline documentation
  • documentations focuses on “how” stuff is done, not giving any insight how the program works
  • curl | sh - i wish this finally dies
  • magic box that does everything but fails horribly in less-common cases (systemd, IDEs)
  • not properly documented compilation process
  • awful regressions on update (gcc, glibc)
  • overreaching Code of Conducts (Node.js, FreeBSD, Go)
  • maintainers that use your production as their testing environment (systemd)
  • “always on edge” crap that forces me to change my code every 6 months (Node.js)
  • high cost by abstraction layers (like Nix)
  • CADT (gtk, gnome)
  • world-open QA-less package ecosystems (NPM, go get)
  • features over stability (btrfs, docker, pulseaudio)