Numbered List of Freenet Project Ideas

Steve Dougherty <steve-kVTqj8yhOEv2eFz/[email protected]> Sun, 12 May 2019 00:37:41 +0000
Newsgroups gmane.network.freenet.devel
Message-ID <982CqZ3RGTfvk3lajcmNX5YcSIqeyN86VCSXIq0Hi0xtNgyjwTrlAYM5ZYTIPxjExKSPKB67FDKY3XAid2jQRfBOaG_yjwwp7ooX99tm5p0=@asksteved.com>
Hi there. Wall of text incoming.

Here are some projects which I think would take Freenet in some interesting=
 directions:

Capabilities / APIs
-------------------

1.  Introduce a restricted plugin API: nextgens has had this idea for a whi=
le - only give plugins a plugin API object instead of a full classloader wi=
th access to the entire Node. If plugins can only access Fred functions exp=
licitly intended for plugin use, it should be way easier to figure out how =
plugins are intended to do things, way easier to document and find document=
ation for because it=E2=80=99s all in one area, and it could also have bett=
er security characteristics with more work - like a system for plugins to b=
e granted and restricted from various capabilities, both within Freenet=
=E2=80=99s API and on the system. It=E2=80=99d be better for backwards comp=
atibility going forward because now it=E2=80=99s defined instead of plugins=
 reaching into the Node object and poking at whatever they found to make th=
ings work.

2.  Make FCP into a plugin: bonus points if it uses the restricted plugin A=
PI. It=E2=80=99d be a good way to test the plugin API and ensure it covers =
a good amount of functionality. This would separate an important function f=
rom core Fred code. (Side note: FCP really should require two-sided user in=
teraction like KeepassXC and its browser companion plugins, or an API key, =
instead of giving access to whatever plugin can connect to its port.) The p=
lugin might also be able to be run in a passive mode in a transition phase,=
 like GitHub can do with changes it makes, where its answer to a query is c=
ompared to that of the integrated FCP. (This=E2=80=99d have to be for some =
subset of queries that doesn=E2=80=99t change the state of things - are the=
re many/any of those? Maybe fall back to integrated FCP for things not impl=
emented by the plugin?)

3.  Supersede FCP with Protocol Buffers and gRPC: it may have made sense at=
 the time, but now there are well-established methods of defining network p=
rotocols and RPCs, and we=E2=80=99re really not doing ourselves favors by c=
ontinuing to roll our own. Doing something like this would make it easier t=
o build applications that use Freenet, like a mobile app that connects to a=
 node.

4.  Transport plugins: we need more things Freenet traffic can look like an=
d more ways for it to move around, and as a bonus doing this will likely co=
ntinue to turn up bugs in various places. There=E2=80=99s a PR for this fro=
m GSoC but it has long since stalled. https://github.com/ValveSoftware/Game=
NetworkingSockets would be very cool to layer Freenet on top of. Not to men=
tion a Tor Hidden Service transport plugin - listen as a hidden service, an=
d connect to other nodes so listening.

5.  Protocol Buffers for network communication: similar thoughts to FCP usi=
ng protocol buffers for local node control. It=E2=80=99d remove weird custo=
m code and make alternate implementations easier. (There=E2=80=99s still pr=
oblem of using Reijendal but that=E2=80=99s separate and seems more managea=
ble.)

6.  Can we adapt existing applications?: forgetting for a moment how JavaSc=
ript adverse much of our userbase is, can those who are willing to run it (=
not from Freesites but from local applications) be served by writing a back=
end powered by Freenet for an existing forum or wiki? How practical would t=
hat be to do? https://github.com/Requarks/wiki  https://github.com/discours=
e/discourse I feel like we=E2=80=99re spending a lot of effort trying to wr=
ite these applications from the ground up, and while that does have some de=
sirable properties it=E2=80=99s also more work for fewer features.


Packaging
---------

1.  First party distro packages: this may be easier once we=E2=80=99re fina=
lly done splitting freenet-ext. I=E2=80=99d been working on it but didn=
=E2=80=99t manage to finish so far. https://github.com/Thynix/fred-staging/=
tree/remove-freenet-ext I=E2=80=99m not opposed to standalone packaging in =
principle, but using package managers would probably both remove the need t=
o do a bunch of careful update work ourselves and allow better distro-speci=
fic integration and adaptation.

2.  Better support for package repositories in Freenet: I think this has be=
en discussed previously, and the Mempo folks ran up against the lack of thi=
s pretty hard, but one way to do it would be to have a MirrorUSK plugin tha=
t can mirror the contents of a USK/manifest to disk. Then, distro packages =
can install Fred with this MirrorUSK plugin already installed and configure=
d to mirror their repo, and point the package manager at the directory on d=
isk unless requested not to. Tada! Distro-specific updates over Freenet.

- Steve