The future of software forges
<p>I&#8217;m still not going to talk about my attack on the forge infrastructure problems quite yet; the software is coming along nicely, but I intend to announce only after it handles its fourth forge type (yes, that was a tease).  But I will say this: I now think I know what the future of forges looks like.  It&#8217;s called <a href="http://roundup.sourceforge.net/index.html">Roundup</a>, and it is <em>astonishingly</em> elegant and potentially more powerful than anything out there. <em>Anything</em>, not excluding the clever decentralized  systems like Fossil or Bugs Everywhere.</p>
<p>Here are the big wins:</p>
<p>1. Mailing lists, issue trackers, and online forums unify into *one* message queue that can be filtered in various ways.</p>
<p>2. Scriptable via XML-RPC or an email responder &#8216;bot.</p>
<p>3. Small base system with good extensibility &#8211; just three base classes (User. Msg, File) and the ability to define new classes.  &#8216;Issue&#8217; is a class built on top of these.</p>
<p>4. Arbitrary attributes per issue is basically free, with baked-in support for defining controlled vocabularies.</p>
<p>5. There&#8217;s a uniform way, called &#8220;designators&#8221;, for messages and other objects to refer to each other in text.</p>
<p>6. Small, clean implementation written in Python.</p>
<p>There are some things it needs, though&#8230; (Read the <a href="http://roundup.sourceforge.net/docs/design.html">Roundup design document</a> before continuing.)</p>
<p><span id="more-1359"></span></p>
<p>First, namespaces. A namespace is a set of User, Msg, and File objects that belong together. Each namespace gets its own hyperdatabase blob. Each namespace numbers objects separately. Each namespace has a unique name used as a prefix in designators.  Thus, if I say [gpsd/msg23], I&#8217;m asking for the 23rd msg object in namespace gpsd.  Everyone talking to a system system has, at all times, a current namespace.  If I just say [msg23], I am designating the 23rd message object in my current namespace.</p>
<p>Why the slash?  because, in the most general case, designators will be URIs &#8211; as, for example, [https://developer.berlios.de/gpsd/msg23].  Presto! There is now an internet-wide namespace of Roundup objects <em>all of which can refer to each other!</em></p>
<p>No prize for guessing that a namespace is a project. I&#8217;ve actually done two things above &#8211; I&#8217;ve defined all the required semantics for multiple projects to coexist in a forgelike system, and I&#8217;ve  created a way for projects to refer to each others&#8217; data even if they&#8217;re not on the same machine.  Both features will be sources of power.</p>
<p>The subtler thing about namespaces is that they are perfectly orthogonal to the system&#8217;s other primitive concepts.  This will pay off huge in some ways I can already foresee and many that I cannot yet.</p>
<p>I think the design also needs a primitive object class to encapsulate repositories.  But I may be wrong about that;   I&#8217;m still considering it.</p>
