Story of Package Managers

Andrey Adamovich, eXtreme Automation

Pain

-

Ecosystems

  • Operating systems:
    • RedHat
    • Debian
    • MacOS
    • Windows
    • ...

Ecosystems

  • Programming languages
    • Javascript
    • Java
    • Objective C
    • Ruby
    • Go
    • Rust
    • Dart
    • PHP
    • Perl
    • ...

Big issue

Dependency/package managers are often 2nd class citizens

What are the standard problems?

  • No dependency manager tooling
  • No defined package format
  • No transitive dependencies support
  • No sticky versions
  • No build/configuration tool integration
  • No central artifact repository
  • Broken system state
  • Version conflicts
  • Flakey versions

History repeats

  • Not every OS has/started with an official package manager
  • Package/dependency managers are not created by language/OS designers
  • Vendors do not really care about automation/dependencies
  • Often shared library hosting is done by 3rd party

Who knows what YUM stands for?

Yellow Dog Updater, Modified

-

What have you been smoking?

y

DNF

Dandified YUM

APT = Advanced Packaging Tool

APK = Alpine Package Keeper

APT/APK

-

MacOS

homebrew

Windows

windows

Programming language ecosystems

-

Java

  • Maven
  • Gradle
  • Ivy

.NET

ruby

Objective C/Swift

ios

Ruby

ruby

Gemfile.lock

Javascript

  • NPM
  • Yarn
  • Bower (dead?)
  • Yeoman
  • Webpack
  • Parcel

Remember?

javascript

Remember?

javascript

What's next?

is-odd

javascript

"-"

javascript

Did you ever make this typo?

npm i -someFlag somePackage

vs

npm i - someFlag somePackage

Other weird packages

Malicious code

javascript

Python

2014

python

2020

python

2020

python

pipenv

python

2 vs 3

Dead snake

ruby

Heterogenous environments

-

Nightmare

-

Meta-tool?

Docker

-

Vulnerabilities all over the place

v

Have you heard of Solarwinds?

Solarwinds

d

Solarwinds

d

Dependabot

s

Security scanners

  • Snyk
  • AquaSecurity
  • NPM
  • Sonatype
  • JFrog

Hmm...

  • When entering the (Dev)Ops, be prepared to fight!
  • You are forced to live in a dependency HELL!
  • ... and a security nightmare!
  • People make money on managing your dependencies! Yes, they do!
  • Situation will not change any soon!

Any TRICKS?

  • Test (on different environments and with freshly fetched dependencies)
  • Release (packages with consistent dependency versions; no wildcards for god sake!)
  • Isolate (project and system package trees; containers can help)
  • Cache (dependencies locally and in organization's artifact repositories)
  • Keep (dependency lists in version control)
  • Stick (to known versions and sign packages)

Semantic versioning

s

SBOM

Links

Links

Thank you!

Questions?

-

That's all for today!

-