mini-Summit report, day 2
Brian Warner
warner at lothar.com
Wed Jul 2 20:05:14 UTC 2014
Summary of the second day. Brian, Daira, and Nathan met in a coffee
shop, and we:
* built a branch that replaces Tahoe's build process with the "create a
virtualenv, peep-install everything into it, make bin/tahoe run
venv/bin/tahoe" technique that Brian used in Petmail. Modulo
bugs/limitations in Peep, this is "safe", in that it checks
pre-specified hashes on all tarballs before running any code from
them. If you managed to get a "good" copy of tahoe's source code, this
would ensure that you only use "good" code for tahoe's dependencies.
We actually wrote two separate versions of this (racing against each
other, dueling-laptops style). My (Brian's) version is published at
https://github.com/warner/tahoe-lafs/tree/venv , and also strips out a
lot of code that was annoying me (version string management, almost
everything in __init__.py and setup.py, setup.cfg, _auto_deps.py).
(basically, tahoe's current "install stuff into support/" trick was
something I came up with 7 years ago before virtualenv was a thing,
and these days we should just use virtualenv. It doesn't even require
that you have setuptools installed first, since it brings its own copy
of virtualenv, which includes a copy of setuptools and pip)
* discussed what a ideal green-field programming language would use for
dependency management. The actual runtime code would identify imported
modules by hashes, and modules would be deep-frozen, so importing the
module should be indistinguishable from interpolating the source code
of the module. Developers would have one phase where they select their
dependencies (using local petnames for convenience, but their
development environment knows how to map those petnames to specific
module hashes), then a separate step where the code gets compiled or
translated into non-petname hash-based modules, for execution.
Module authors (and others) would publish signed "mod XYZ would be a
good replacement for mod ABC" links (edges in a graph, where the nodes
are module hashes) to indicate newer versions or forks, but these
would not be followed automatically. Ideally the developer would look
at the changes (or the recommendations) to make decisions, and for
not-entirely-compatible changes, the edges would include information
about how you need to update your calling code to match. This could
guide a tool (like python's 2to3) that search through your codebase
for things that need changing. Imagine a screen that says "to update
from dependency v1 to v2, you must changes the following 4 call
sites".
The runtime tool should accept overrides from the ops-folks/admins to
say "I know you wanted hash 123, but you should accept hash 456
instead", to deploy security updates faster than the upstream author
can change their locally-declared dependencies. In general, all
modules declare their dependencies with strong references (hashes).
(Brian did some work in this space back in the Jetpack days:
http://people.mozilla.org/~bwarner/jetpack/components/ )
cheers,
-Brian
More information about the tahoe-dev
mailing list