bill auger d342d19db9 Update doc README (#154) | 2 년 전 | |
---|---|---|
.. | ||
EXAMPLE_WORKFLOWS.md | 2 년 전 | |
README.md | 2 년 전 |
Distributed version control systems (VCS) were created to allow maximal flexibility of project management structures and code hosting, in contrast to the client-server version control systems that were most widely used at the time, which denote one replica as the canonical master source. Existing project management / code hosting websites (aka: forges) soon began supporting these, and some new ones sprung up as well; but even the new ones were modeled upon the centralized "hub" paradigm (star topology, in networking lingo), with a single canonical "upstream" parent replica, and all other replicas implicitly and permanently designated as "downstream" child replicas (aka: forks). This type of website well serves the traditional purpose of facilitating release distribution, collaboration, and end-user participation; but at the expense of re-centralizing the naturally distributed VCS.
Indeed, although distributed version control systems such as Git have become widely accepted as the de-facto state-of-the-art, it is still (and for good reason) the standard practice that one replica will be designated, albeit logically by convention, as the canonical upstream source; so this retro-fitting of distributed VCS onto the traditional centralized model, is not often contested. Philosophically speaking though, this has the consequence of casting all software development as intrinsically hierarchical in nature; which is often undesirable, as it is antithetical to truly free and open, non-hierarchical project management "structures" such as adhocracy.
The goal of the ForgeFed project is to support the familiar collaborative features of centralized web forges with a decentralized, federated design that, by fully embracing the mostly forgotten merits distributed VCS, does not rely on a single authoritative central host, does not impose a hierarchical master/fork collaboration structure, and can be self-hosted by anyone; with all such independent peers cooperating to form a larger logical network of inter-operable and correlated services.
ForgeFed is not a new type of forge. In fact, that would be counter to the primary motivation: maximizing user options, tools, and work-flow preferences. There are many freely-licensed and feature-rich forges in existence already. Instead, ForgeFed is a set of extensions to the ActivtyPub communication protocol, which can be retro-fitted onto existing forges, with minimal intrusion into the internal code-base, in order to become inter-operable with any other similarly equipped forge. Because the majority of forge offer roughly the same conventional feature-set, features also shared with other project management tools (eg: trackers, mailing lists); they can all be made to inter-operate without "re-inventing the wheel". By using ActivtyPub as the communication protocol, participating ForgeFed services will be naturally accessible from the wider "Fediverse" as well, for whichever sub-set of interactions that such non-forge hosts/clients may support.
The preceding bullet point is intended to encourage people to self-host their own forge, even if they do not maintain any projects themselves, and even if they host their forge with a laptop. That allows interacting with the forge while offline, without missing any incoming federated events nor dropping outgoing federated events. This would also allow forges to implement advanced features such as push-mirroring and robustly synchronizing the entire data-set of remote repos or migrating the entire project to another forge; so that their users could interact with foreign forges in all of the expected ways, while offline and/or without ever contacting foreign hosts directly.
See EXAMPLE_WORKFLOWS.md for some general ideas on how users could interact with the system.