GithubHelp home page GithubHelp logo

upm's Introduction

Upstream Package Manager (upm)

Package manager manager and SDK manager, because someone had to make the 15th standard.

xkcd: standards


What?

Installs shit so you don't have to, and manages the dependencies of the dependencies so you're not stuck with version mismatches.

Like?

Whatever has been set up.

How?

Through a combination of GitHub repositories, automatic redirection, and good 'ol fashioned manual link following. And of course lists for when absolutely everything else fails.

Requirements?

A C++17 compiler, and Linux or MacOS, and access to tar with a few specs (see the tar section). Note that MacOS will have weaker support, because I don't have access to any Mac machines. Please consider contributing to the project if you have access to a Mac.

General UNIXes beyond Linux and MacOS will have varying support, for the same reason MacOS doesn't have full support: I don't have those operating systems, and testing them is a slow and annoying process that I don't want to spend my time on.

Tar

  • Supports --strip-components
  • Supports automatic tar type detection*

*: may be dropped if it turns out there's a lot of tars that support --strip-components, but somehow not automatic type detection. Feedback needed.

Initial lineup

The plan for the time being, in no particular order, is:

  • Maven
  • Sdkman (maven is supported separately from sdkman, but Java isn't, because of the substantially better repo support. Java also has more platform quirks)
  • CMake
  • Python + pip (possibly separate)
  • Node + npm (bundle), replacing the 5 node version managers recommended by npm's npm package
  • Config for custom packages, that may or may not be completely unrelated to package managers and SDKs

However, an important point here is to also allow uninstalling. This isn't something that's easily done when installing manually, because it some times installs dependencies in a bunch of different places. This is primarily true for makefile-based programs.

That said, this project may evolve into a glorified "unstable apt" that sources the newest packages, instead of whatever ancient version retrieved when the dinosaurs were still around, that the repos push. We'll see how far this rabbit hole goes.

Advantages

  • One package manager
  • ... that's self-managed, and running on UNIX, a place where binaries can modify the underlying binary without needing to stop.
  • Exposes binaries through already existing entries in the PATH: no performance loss (unlike nvm, which takes at least 2.6+ seconds to load, blocking my terminal in the process)
    • ... and still offers version management
  • Manages symlinks, not path entries, and is always on-demand invoked

Disadvantages

  • Still doesn't modify /usr/bin packages, and consequently may break with programs that hard-code /usr/bin/<binary>-paths. This is currently [wontfix] because of the potentially bad side-effects this has.

Caveats

  • While upm does handle version management, it's not meant to be a replacement for virtualenvs in your favorite language. This means that if you need a per-project install, this is currently outside the scope of upm. Note, however, that upm does let you set and use a specific version of a given package for a terminal session.

upm's People

Contributors

lunarwatcher avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.