Hello all!

Our original grant funds have run out and although a continuation of our
work was previously discussed, we never received a response to our proposal
sent months ago. So, this is our final report on the progress of our grant
work, the work we did beyond it and a call for input on some outstanding
items.

Least Authority has been a significant contributor to the Tahoe-LAFS open
source project for the last 14 years through self-funded work, numerous
external grants and more recently, this grant from the Tahoe-LAFS Software
Foundation. One of our products, PrivateStorage <https://private.storage/>,
utilizes Tahoe-LAFS and another, Winden
<https://leastauthority.com/product-development/winden/>/Destiny
<https://leastauthority.com/community-matters/destiny/>, utilizes Magic
Wormhole. We hope to continue to contribute to the project and community,
maintaining it and moving it forward into the future, but at this time our
role in the project going forward is uncertain.

Unfortunately, the end of our grant work also includes the additional
maintenance work we have been doing while working on the grant. In addition
to having no decision on our proposal, we have also not received a response
on if we can continue that maintenance work or if someone will be taking
over that work. Below is an item that is currently in flux because there is
no plan for continuation of it.


   - VPS hosted by Hetzner - Least Authority will continue to pay for and
   maintain these servers through the end of the year. At that point without
   any instruction from the stakeholders as to the future plans for them, we
   will have to shut them down.

As our maintenance work was often hindered by the state of Trac, it was
decided that we would also tackle the Move Off Trac
<https://tahoe-lafs.org/trac/tahoe-lafs/wiki/MoveOffTrac> project. However,
our work on this has been made more difficult than necessary by the lack of
direct access to the required resources (DNS records and Linode server).
Now more than 6 months after our initial request (in February), despite the
workarounds we’ve tried and the demonstrated improvements of the
status-quo, the delays and the resulting overhead have made this lack of
access issue an insurmountable obstacle for us.

In order to wrap up this work, we are putting out one last call to the
community for input and consensus on the following items. Without a
response from the community within the next two weeks, we will be unable to
complete this migration.

   - Write access to the DNS records of the tahoe-lafs.org domain (#4162
   <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4162>)
   - Interactive access to the Trac instance via SSH on Linode server (#4161
   <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4161>)

We have detailed in the summary below the work we have completed for the
Tahoe-LAFS Foundation under the grant, including for the added Move Off
Trac project and the maintenance and community building work we have done:


Original Grant Scope Work:

Mobile app

   - Start with the "PrivateStorage Mobile" Android-only read-only app
      - Status: Completed
         - Available on the Google Play Store
         
<https://play.google.com/store/apps/details?id=org.tahoe_lafs.tahoe_lafs_mobile>
         .
         - All Tahoe-LAFS formats are readable and mostly verified.
         - Launches Android intent to view files.
         - Magic wormhole or raw cap input.
         - Detailed reporting of errors on cap-by-cap basis.
         - Downloaded data retained through grid changes.
         - Minimizes demand on storage servers.
         - Multithreading on client for user-perceived performance.
         - Improvement opportunities include:
            - Some aspects of SSK validation (2 days work remaining).
            - Reasonable memory demand when processing large files (5 days).
            - Indicate already downloaded data at restart.
            - Support more magic folder functionality.
            - More comfortable grid selection and editing.
         - Support arbitrary grids
      - Status: Completed
         - The app now supports custom grids (instead of just
         PrivateStorage). It defaults to the Tahoe-LAFS public test grid.
         - The app now also reads Tahoe-LAFS directory capabilities (in
         addition to the Magic Folder format), and they may contain
both CHK and SSK
         files.
         - Individual CHK or SSK files supported (in addition to folders).
      - Port to iOS
      - Status: Partially Complete (70% Complete)
         - Worked out licensing, set up development environment & CI,
         updated dependencies and framework, complete successful
build, set up CI.
         - ToDo: Wire app actions to iOS, Publish on App Store, Integrate
         as iOS FileProvider.
      - Add upload
      - Status: Partially Complete (10% Complete)


Research/implement "recovery phrases" for rootcap management

   - Status:  Completed
      - Due to being blocked on new releases of
      zero-knowledge-access-pass-authorizer
      <https://github.com/PrivateStorageio/ZKAPAuthorizer>, and
      python-challenge-bypass-ristretto
      <https://github.com/LeastAuthority/python-challenge-bypass-ristretto>
      (to support ZKAPs with Tahoe-LAFS 1.20.0), the ZKAPAuthorizer plugin was
      made optional so this work could be completed.
      - Supporting work:
         - Tahoe-LAFS: ticket #4096
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4094> and PR #1365
         <https://github.com/tahoe-lafs/tahoe-lafs/pull/1365> (“Support the
         creation of a new directory capability with a pre-determined signature
         key”).
         - Published “deterministic-keygen” Rust crate
         <https://crates.io/crates/deterministic-keygen> (with
accompanying Python
         bindings <https://pypi.org/project/deterministic-keygen/>) for
         generating RSA keys deterministically.
         - Published "lafs" Rust crate <https://crates.io/crates/lafs>
         (with accompanying Python bindings <https://pypi.org/project/lafs/>)
         for independently verifying the derivation of dircap URIs.
         - Gridsync: Tahoe 1.20 support (Issue #737
         <https://github.com/gridsync/gridsync/issues/737>; PR #738
         <https://github.com/gridsync/gridsync/pull/738>), optional
         ZKAPAuthorizer (Issue #733
         <https://github.com/gridsync/gridsync/issues/733>; PR #736
         <https://github.com/gridsync/gridsync/pull/736>), Recovery Phrases
         user interface and integration (Issue #674
         <https://github.com/gridsync/gridsync/issues/674>; PR #740
         <https://github.com/gridsync/gridsync/pull/740>).


Additional Out of Scope Work:

   - Move Off Trac
      - Status: Current status below - details and deliverables are
      described in the MoveOffTrac
      <https://tahoe-lafs.org/trac/tahoe-lafs/wiki/MoveOffTrac> wiki page
         - Deliverable 1- self-hosted server (#4161
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4161>)
            - COMPLETE - PoC (retired)
            - COMPLETE - VPS with Forgejo only
               - Managed from code with CI/CD with sops+pass secrets.
               - Backups with BorgBase.
               - SSO with CodeBerg, GitHub and GitLab.
               - Took longer then required due to the lack of access to the
               DNS (#4162
               <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4162>).
               - Workaround using `of.tahoe-lafs.org` sub-domain.
            - BLOCKED - Website only with redirect/proxy rules to legacy
            resources
               - Jekyll sources with CI/CD are hosted on Forgejo.
               - Hosting and redirect/proxy rules are managed from code.
               - Taking longer than required due to the lack of access to
               the DNS too.
               - Workaround: manual DNS update (#4183
               <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4183>) and
               related asynchronous changes - still no date after 6 weeks.
               - The Hall of Fame still needs to be migrated as a post or a
               page.
            - PENDING - Issues and wiki hosted by Forgejo
               - Require the completion of the previous phase.
               - Migration plan ready as described in Deliverable 2.
               - Will take longer than required due to the lack of access
               to the Trac server.
            - TODO - Other resources from the Linode server
               - Replace the current binary repository for Tahoe-LAFS
               releases.
            - Deliverable 2 - detailed migration plan from Trac to
         self-hosted Forgejo
            - COMPLETE - Tested and described in the MoveOffTrac
            <https://tahoe-lafs.org/trac/tahoe-lafs/wiki/MoveOffTrac> wiki
            page
         - Deliverable 3 - high-level migration plan from self-hosted to an
         SaaS provider
            - COMPLETE - Migration plan for the Forgejo repository/ies
            - IN PROGRESS - Migration plan for the static website



   - Maintenance Work
      - Recreated the Test Grid
      <https://tahoe-lafs.org/trac/tahoe-lafs/wiki/TestGrid>.
      - Tahoe package back in Debian 13 “Trixie”
      <https://packages.debian.org/trixie/tahoe-lafs> (and its downstream
      distros <https://repology.org/project/tahoe-lafs/versions>).
      - Fixing Tahoe’s CI:
         - 8/18 tickets
         
<https://tahoe-lafs.org/trac/tahoe-lafs/query?status=assigned&status=closed&status=new&status=reopened&changetime=2024-12-01..2025-01-27&keywords=~ci&col=id&col=summary&col=keywords&col=status&col=owner&col=type&col=priority&col=changetime&desc=1&order=changetime>
         - #4098 <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4098>, #4114
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4114>, #4128
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4128>, #4132
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4132>, #4134
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4134>, #4136
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4136>, #4140
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4140>, #4141
         <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4141>.
      - ZKAPAuthorizer CI revival:
         - Issues #462
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/issues/462>,
         #468
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/issues/468>,
         #470
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/issues/470>,
         #472
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/issues/472>;
         PRs #463
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/463>, #465
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/465>, #467
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/467>, #469
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/469>, #471
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/471>, #476
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/476>, #477
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/477>, #482
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/482>, #483
         <https://github.com/PrivateStorageio/ZKAPAuthorizer/pull/483>.
      - Python Bypass Ristretto CI revival:
         - Issues: #57
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/57>,
         #58
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/58>,
         #60
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/60>,
         #64
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/64>,
         #65
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/65>,
         #67
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/67>,
         #68
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/issues/68>;
         PRs #61
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/pull/61>,
         #62
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/pull/62>,
         #66
         
<https://github.com/LeastAuthority/python-challenge-bypass-ristretto/pull/66>
         .
      - Monitoring Web/Ticket/Wiki and TestGrid with Upptime
      <https://tahoe-lafs.github.io/infrastructure-upptime/> (#4175
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4175>).
      - Document recurrent Trac downtimes in tickets (#4176
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4176>, #4178
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4178>).
      - Manage DNS records from code (#4162
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4162>).
         - Ideally for the whole `tahoe-lafs.org`domain, but could only do
         it for the `of` subdomain due to the lack of access.
      - Fix GitHub Actions (org. wide) due to an outdated CC  (#4182
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4182>).
      - Release updated PyCDDL <https://gitlab.com/tahoe-lafs/pycddl> after
      its main dependency had been yanked.
      - Fix Tor integration tests (#3943
      <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3943>, PR #1435
      <https://github.com/tahoe-lafs/tahoe-lafs/pull/1435>).
      - NixOS 25.05 Tahoe-LAFS service definition fixes (PR #407172
      <https://github.com/NixOS/nixpkgs/pull/407172>).
      - ZFEC compatibility and interface improvements (PRs #119
      <https://github.com/tahoe-lafs/zfec/pull/119>, #130
      <https://github.com/tahoe-lafs/zfec/pull/130>, #131
      <https://github.com/tahoe-lafs/zfec/pull/131>).
      - Python 3.13 fixes for txi2p, foolscap and pyutil.



   - Community Building
      - Onboarding new members to the community (Blaise, Jeff, and Rodrigo
      from the SnakeDev team).
      - Represented Tahoe-LAFS at: ZconV, DWeb Camp, Web3 Summit, AI & Data
      Summit, Interledger Summit, Devcon, SplinterCon, ETHDam, BOB2025
      <https://bobkonf.de/2025/>  and gave Lightning Talk at the 38C3
      Off-the-Grid P2P Communication Meetup
      
<https://events.ccc.de/congress/2024/hub/en/event/off-the-grid-p2p-communication-meetup/>
      and FOSDEM 2025
      
<https://ftp.belnet.be/mirror/FOSDEM/video/2025/k1105/fosdem-2025-6674-lightning-lightning-talks.av1.webm#t=2742,2943>
      .
      - Discussed Tahoe-LAFS-related possible collaborations with the
      Filecoin Foundation for the Decentralized Web, Spritely Institute,
      Superbloom, Ford Foundation, OTF, eQualitie, and the Tor Foundation,
      amongst others, in 2024.
      - Assisted with SnakeDev’s Documentation project during the months of
      August to December 2024.
      - Provided support to other members of the community and their work
      through regular pairing sessions with non-Least Authoritarians over the
      course of the grant timeframe.




The above noted Move Off Trac, Maintenance, and Community Building
activities were not originally included in the planned grant project. These
additional contributions utilized time and resources originally planned for
the following development activities and therefore were not able to
complete them:

Research ZKAP/Storage-time sharing, new capability types (append-only,
rainhill), and a browser-based WASM client

   - Status: Started
      - Reviewed past efforts and designs (“Rainhill”), began researching
      other projects (Spritely’s “OCapN”), started investigating “append-only”
      caps, misc. discussions with community

Improve/complete Cloud Backend so servers can delegate storage to S3/etc

   - Status: Started
      - Work ongoing in tahoe-s3 <https://gitlab.com/tahoe-lafs/tahoe-s3>
      and tahoe-great-black-swamp
      <https://gitlab.com/tahoe-lafs/tahoe-great-black-swamp>


Despite the challenges we faced, our team enjoyed working on this project
and with the rest of the community and we would like to extend our long
history working with Tahoe-LAFS into the future.

We look forward to hearing from the community and hope to get input and
consensus regarding the following issues:

   - VPS hosted by Hetzner - Least Authority will continue to pay for and
   maintain these servers through the end of the year. At that point without
   any instruction from the stakeholders as to the future plans for them, we
   will have to shut them down.
   - Write access to the DNS records of the tahoe-lafs.org domain (#4162
   <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4162>)
   - Interactive access to the Trac instance via SSH on Linode server (#4161
   <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/4161>)


Please let us know if you have any questions or would like to work on
anything together in the future!
_______________________________________________
tahoe-dev mailing list
tahoe-dev@lists.tahoe-lafs.org
https://lists.tahoe-lafs.org/mailman/listinfo/tahoe-dev

Reply via email to