---
# System prepended metadata

title: Tahoe Article

---

# Tahoe Article

a few bullet points summarizing the work and with links (to show it is open source / public - this should be code and any discussions).
At the end we'll probably want to do a blog post or some other public announcement about it.

1. Preparation and Foundation
Establish the detailed design specification, produce a project plan for GBS and clear obstacles to the GBS code implementation.
Milestone(s)
- [x] Finalize the GBS specification;
- [x] Refactor Tahoe-LAFS server-side storage code to isolate Foolscap from storage logic; and
- [x] Refactor Tahoe-LAFS client-side storage code to isolate Foolscap from storage logic.

2. Integration
Implement the internal and external interfaces necessary for both clients and servers to be aware of the availability of GBS capabilities.
Milestone(s)
- [x] Implement GBS capability announcement in Tahoe-LAFS server code;
- [ ] Implement GBS capability interpretation in Tahoe-LAFS client code; (Status: The basics work, but still some work left to do on things like supporting multiple server addresses, Tor and I2P addresses, and reducing performance overhead)
- [ ] Client/server storage protocol negotiation chooses GBS over Foolscap when possible. (Current status: Foolscap is still the default for now, but in unreleased master branch this can be enabled with a configuration flag.)

3. Implementation
Implement the GBS network protocol such that it is usable by the Tahoe-LAFS storage logic.  Integrate this implementation with the storage logic.
Milestone(s)
- [x] Resolve security issues raised by the security audit; 
- [x] Implement server-side storage part of GBS in Tahoe-LAFS; and
- [x] Implement client-side storage part of GBS in Tahoe-LAFS.

May-Lee: "How far along is the implementation of server side and/or client-side storage part of GBS in Tahoe?"
Itamar: "It minimally works end-to-end now"

4. Release
Roll out a version of Tahoe-LAFS that supports both Foolscap and GBS. Clients will be configured to use GBS when both protocols are available.
Milestone(s)
- [ ] Release a version of Tahoe-LAFS supporting both Foolscap and GBS; and
- [ ] Publish an announcement drawing attention to the GBS work and its benefits.

https://tahoe-lafs.org/trac/tahoe-lafs/query?status=assigned&status=new&status=reopened&group=status&milestone=HTTP+Storage+Protocol

(1) reliability 
(2) support for more complex networking situations 
(3) performance 
(4) documentation (no tickets filed yet)

Early in Q1

Relevant PRs: https://github.com/tahoe-lafs/tahoe-lafs/pulls?q=is%3Apr+is%3Aclosed+label%3A%22HTTP+Storage+Protocol%22

* IStorageServer mentions: refactoring to be generic
* After making it more generic, PR#1161 is when HTTP implementation started.
* PR#1220 is when it first starts listening in way that can support both protocols
    * Don't have to change firewall config/don't have to change anything on server side; once upgraded will start using http transparently
    * Don't have to add another port
* PR#1225 is first time it worked end to end
* Spec gets improved along the way as it is implemented (PR#1177)
* Look at changes in spec file: https://github.com/tahoe-lafs/tahoe-lafs/blob/master/docs/proposed/http-storage-node-protocol.rst (History: https://github.com/tahoe-lafs/tahoe-lafs/commits/master/docs/proposed/http-storage-node-protocol.rst)

Further work: 

Will be done Q1; need Q2 - Q4 
Can already see speed improvement areas