devchat notes 28-Mar-2017

Brian Warner warner at
Tue Mar 28 17:48:47 UTC 2017

Tahoe-LAFS devchat 28-Mar-2017

Attendeees: warner, exarkun


* Foolscap proxy server: LAE wants to host multiple customers (with one
  Introducer and one Server each) on a single host. This is much
  easier/cheaper if they can all share a single IP address and port.
  * Foolscap redirections: client says "can I connect to Tub XYZ",
    server says "please talk to IP/PORT=blah instead". Foolscap only has
    partial support for redirections so far (server knows how to emit
    them, but clients won't follow them).
  * Came up with "foolscap proxy": server says "sure, I can be Tub XYZ",
    but internally it opens a new TCP connection to some (probably
    local) IP and port, and relays all traffic to it
  * This will probably be deployed as a standalone process, using
    Foolscap but not Tahoe, one per host.
* Multi-tenancy: it's pretty easy to write a program that puts multiple
  Tahoe nodes in a single process: each one is an all IMultiService
  configured with a base directory, so just make a bunch and
  setServiceParent them to some containing MultiService.
  * sharing a Tub would be useful
  * Foolscap used to support this, but I stripped it out because it
    raised difficult questions about service lifetimes and ownership (if
    the last Tub associated with a Listener is stopped, should the
    Listener be stopped too?)
  * New approach: make a distinct MultiListener object. Creator must
    manage lifetime (startService/stopService) themselves. Then either
    tub.addListener(ml) or ml.addTub(tub).
* exarkun was learningabout StorJ: interesting JS-based project, not
  unlike Tahoe, uses DHT and some finite number of proof-of-storage
* warner was learning about Dat: interesting JS-based project, not
  unlike Tahoe, uses DHT, shares directory trees, sort of has single
  writecap and multiple readcaps but no verifycaps
* want to write up a competitive analysis blog post about StorJ, Dat,
* thinking about server provisioning again
  * want a single binary, e.g. "tst" = tahoeserverthing
  * want to run "tst init", "tst daemon" like with IPFS
  * view status through a web page
  * then "tst add-client [--petname=] [--quota]=", emits invitation code
  * on client do "tct accept INVITECODE"
  * that should cover the single-human run-my-own-server use case
  * server can require extra configuration if it doesn't have public IP
  * for client-uses-group-of-servers, get the invitation from a
    metaserver instead of from one specific server, the metaserver makes
    decisions about which servers you use
  * for "I want to run a public server that accepts BTC", you should
    configure the server to accept BTC somehow, then use some sort of
    invitation to get it published to a yellow pages
  * no idea how to have clients read the yellow pages and make decisions
    about which servers to use, maybe start by having that be manual
* warner wants to prototype something around provisioning, maybe
  omitting the tahoe-specific encode/encrypt/upload stuff entirely

More information about the tahoe-dev mailing list