HACKER Q&A
📣 rlue

Is there an easy way to release a CLI program for all major platforms?


I just wrote a small CLI program[0] (actually a wrapper for a collection of shell scripts, similar to git) and would like to package it for easy installation on Debian/Ubuntu, Red Hat/Fedora, Arch, macOS, and hopefully even Windows (via WSL?).

Is there a tool or service for making this easy? So far, I've found fpm[1]. I haven't dug into it enough to know whether it's the solution I'm looking for, but I also wanted to solicit the community for alternatives in case I'm missing something even better.

The dependencies are minimal (just Ruby stdlib). Here are options I've considered and opted against:

• rubygems: I'm not a huge fan of using a language's package manager for end-user software. What happens when the system upgrades its version of Ruby? Does the user have a ruby version manager like rvm or rbenv installed? and so on.

• docker: a couple weeks back, an article entitled "Run More Stuff in Docker" was trending here[2]. I like the idea, but the approach is a minor hobby unto itself and way too burdensome to ask of general-audience, potentially not-very-technical end-users.

My program is simple enough that I hope it could be used as an introduction to CLI concepts/UNIX/shell pipes for the uninitiated; someone should not have to be a developer to use it or understand how it works. Assuming a very limited familiarity with the command line, I want to offer install instructions that make no assumptions about the user's system and should always just work; e.g., `brew install cram` / `sudo dpkg -i cram.deb` / etc.

[0]: https://github.com/rlue/cram

[1]: https://github.com/jordansissel/fpm

[2]: https://jonathan.bergknoff.com/journal/run-more-stuff-in-docker/


  👤 matheist Accepted Answer ✓
Very timely question, considering 'jart's work has been at the top of HN in the last couple days[+]. Take a look at https://justine.lol/ape.html especially the portable Javascript interpreter. If you go that route you'd want to adapt it to Ruby. That'd be some nontrivial work, most likely, but it'd definitely be pretty neat.

[+] https://news.ycombinator.com/item?id=26273960