README.md in upm-0.1.15 vs README.md in upm-0.1.16

- old
+ new

@@ -1,38 +1,52 @@ # upm: Universal Package Manager ## Concept: -Wraps all known package managers to provide a consistent and pretty interface, along with advanced features not supported by all tools, such as rollback and pinning. +Wraps all known package managers to provide a consistent and pretty interface, along with advanced features not supported by all tools, such as: +- install log +- rollback +- pinning +- fuzzy search +- containerization/sandboxing +- learning (community statistics and user choices) All tools will give you modern, pretty, colourful, piped-to-less output, and you'll only have to remember one consistent set of commands. It'll also prompt you with a text UI whenever faced with ambiguity. -It will also allow users to maintain lists of their favorite packages (and sync them to some remote server), so that they can automatically install them whenever they setup a new machine. (This can include git repos full of dotfiles/scripts, to give the user a comfortable home environment regardless of which OS they're using.) +You can maintain lists of your favorite packages (and sync them to some remote server), so that you can automatically install them whenever you setup a new machine. (This can include git repos full of dotfiles/scripts, to give you a comfortable home environment, regardless of which OS you're using.) +## Installation: + +First, install Ruby. Then: + +``` +gem install upm +``` + ## Usage: ``` upm <command> <pkg> up <command> <pkg> u <command> <pkg> ``` ## Commands: -* `install` -* `remove` +* `install`/`add` - download and install a package +* `remove`/`uninstall` - remove a previously installed package * `build` - compile a package from source and install it * `search` - using the fastest known API or service * `list` - show all packages, or the contents of a specific package * `info` - show metadata about a package * `sync`/`update` - retrieve the latest package list or manifest * `upgrade` - install new versions of all packages -* `verfiy` - verify the integrity of installed files +* `verify` - verify the integrity of installed files * `audit` - show known vulnerabilities for installed packages * `pin` - pinning a package means it won't be automatically upgraded * `rollback` - revert to an earlier version of a package (including its dependencies) -* `log` - show history of package installs +* `log` - show history of package installs * `packagers` - detect installed package managers, and pick which ones upm should wrap * `sources`/`mirrors` - select remote repositories and mirrors * `clean` - clear out the local package cache * `monitor` - ad-hoc package manager for custom installations (like instmon) * `keys` - keyrings and package authentication @@ -68,25 +82,27 @@ * FreeBSD: `pkg`/`ports` * OpenBSD: `pkg_add`/`ports` * NetBSD: `pkgin`/`ports` * SmartOS/Illumos: `pkgin` * Windows: `apt-cyg`/`mingw-get`/`nuget`/`Windows Update`/(as-yet-not-created package manager, "winget") -* Wine: `winetricks` +* Wine/Proton/Steam: `winetricks`/`steam` * Ruby: `rubygems` * Python: `pip`/`easy_install` -* Javascript: `npm` -* Clojure: `leiningen` -* Java: `gradle` -* Erlang: `rebar` -* Scala: `sbt` +* Javascript/NodeJS: `npm` * Rust: `cargo` +* Dart: `pub` +* go: `go-get` * R: `cran` +* Qt: `qpm` * Lua: `rocks` * Julia: `Pkg` * Haskell: `cabal` +* Clojure: `leiningen` +* Java: `gradle` +* Erlang: `rebar` +* Scala: `sbt` * Perl: `cpan` -* go: `go-get` ...[and many more!](https://en.wikipedia.org/wiki/List_of_software_package_management_systems) ## What it might look like: @@ -101,10 +117,56 @@ Rollback: ![pacman-rollback](https://raw.githubusercontent.com/epitron/scripts/master/screenshots/pacman-rollback.png) +# Future Directions + ## TODOs: * Use the pretty text-mode UI that passenger-install uses * Context-dependent operation * eg: if you're in a ruby project's directory, set the 'ruby' namespace to highest priority + +## Containers, VMs, and Virtual Environments: + +Containers, VMs, and Virtual Environments are another pile of tools which do roughly the same thing: they gather together the dependencies for a specific program, or small set of programs, into a bundle, and create an isolated environment in which it can run. + +In the future, these could be wrapped by `ucm` (Universal Container Manager), if I get around to it. + +### Container tools to wrap: + +* Virtual Environments: + * Python: `virtualenv` + * Ruby: `bundler` + * Java: `gradle` + * NodeJS: `npm` +* Containerized Applications/Systems: + * AppImage + * docker + * rkt + * snapd + * systemd + * podman + * nanobox + * SmartOS zones + * BSD jails +* Wine environments: + * wine prefixes + * playonlinuxs + * proton +* Virtual Machines: + * qemu + * virtualbox + * VMware + * firecracker +* Hypervisors: + * ESXi + * Xen + * Nova + + +## Similar Projects + +* [PackageKit](https://en.wikipedia.org/wiki/PackageKit) +* [libraries.io](https://libraries.io) +* [Repology](https://repology.org)