{"id":1359,"date":"2009-10-29T20:39:42","date_gmt":"2009-10-30T01:39:42","guid":{"rendered":"http:\/\/esr.ibiblio.org\/?p=1359"},"modified":"2010-07-18T20:28:29","modified_gmt":"2010-07-19T01:28:29","slug":"the-future-of-software-forges","status":"publish","type":"post","link":"http:\/\/esr.ibiblio.org\/?p=1359","title":{"rendered":"The future of software forges"},"content":{"rendered":"<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>\n<p>Here are the big wins:<\/p>\n<p>1. Mailing lists, issue trackers, and online forums unify into *one* message queue that can be filtered in various ways.<\/p>\n<p>2. Scriptable via XML-RPC or an email responder &#8216;bot.<\/p>\n<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>\n<p>4. Arbitrary attributes per issue is basically free, with baked-in support for defining controlled vocabularies.<\/p>\n<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>\n<p>6. Small, clean implementation written in Python.<\/p>\n<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>\n<p><!--more--><\/p>\n<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>\n<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>\n<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>\n<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>\n<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>\n","protected":false},"excerpt":{"rendered":"<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&hellip; <a class=\"more-link\" href=\"http:\/\/esr.ibiblio.org\/?p=1359\">Continue reading <span class=\"screen-reader-text\">The future of software forges<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-1359","post","type-post","status-publish","format-standard","hentry","category-software","entry"],"_links":{"self":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/1359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1359"}],"version-history":[{"count":9,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/1359\/revisions"}],"predecessor-version":[{"id":2253,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/1359\/revisions\/2253"}],"wp:attachment":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1359"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}