<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Armed and Dangerous</title>
	<atom:link href="http://esr.ibiblio.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://esr.ibiblio.org</link>
	<description> Sex, software, politics, and firearms. Life's simple pleasures...</description>
	<lastBuildDate>Fri, 06 Nov 2009 01:17:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maybe if moral cowardice cost money, it would be less common?</title>
		<link>http://esr.ibiblio.org/?p=1398</link>
		<comments>http://esr.ibiblio.org/?p=1398#comments</comments>
		<pubDate>Fri, 06 Nov 2009 01:10:24 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1398</guid>
		<description><![CDATA[Heh.  State representative Fred Maslack of Vermont has proposed a bill under which non-gun-owners would have to register and pay a fee. Entertainingly enough, there is actual justification for this in a careful reading of the Vermont state constitution.
The Hon. Rep. Maslack is joking.  I think.  And I&#8217;m against requiring people who [...]]]></description>
			<content:encoded><![CDATA[<p>Heh.  State representative Fred Maslack of Vermont has proposed a bill under which <a href="http://www.resistnet.com/profiles/blogs/a-novel-idea-register-nongun">non-gun-owners would have to register and pay a fee</a>. Entertainingly enough, there is actual justification for this in a careful reading of the Vermont state constitution.</p>
<p>The Hon. Rep. Maslack is joking.  I think.  And I&#8217;m against requiring people who don&#8217;t want to bear arms to do so.  But gad, how tempting &#8211; because underlying his argument is a truth that the drafters of the Vermont and U.S. constitutions understood.  People who refuse to take arms in defense of themselves and their neighbors are  inflicting a cost on their communities far more certainly than healthy people who refuse to buy medical insurance (and yes, I do think that proposed mandate is an intended target of Maslack&#8217;s jab).  That externality is measured in higher crime rates, higher law-enforcement and prison budgets, and all the (dis)opportunity costs associated with increased crime.  And that&#8217;s before you get to the political consequences&#8230;</p>
<p>I&#8217;ve never made a secret of my evaluation that refusal to bear arms is a form of moral cowardice masquerading as virtue. Real adults know how precious human life is, when they are ethically required to risk it on behalf of others, and when killing is both necessary and justified. Real adults know that there is no magic about wearing a police or military uniform; those decisions are just as hard, and just as necessary, when we deny we&#8217;re making them by delegating them to others. Real adults do not shirk the responsibility that this knowledge implies.  And the wistful thought Rep Maslack&#8217;s proposal leaves me with is&#8230;maybe if moral cowardice cost money and humiliation, there would be less of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1398</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>Structure Is Not Meaning</title>
		<link>http://esr.ibiblio.org/?p=1387</link>
		<comments>http://esr.ibiblio.org/?p=1387#comments</comments>
		<pubDate>Thu, 05 Nov 2009 15:42:21 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1387</guid>
		<description><![CDATA[So, I announce ForgePlucker, and within a day I&#8217;ve got some guy from Y Combinator sneering at me for using regular expressions to parse HTML.  Says it&#8217;s &#8220;crappy code&#8221;.  The poor fool&#8230;he has fallen victim to a conceptual trap which I, fortunately, learned to avoid decades ago.  I could spout a freshet [...]]]></description>
			<content:encoded><![CDATA[<p>So, I announce ForgePlucker, and within a day I&#8217;ve got some guy <s>from Y Combinator</s> sneering at me for using regular expressions to parse HTML.  Says it&#8217;s &#8220;crappy code&#8221;.  The poor fool&#8230;he has fallen victim to a conceptual trap which I, fortunately, learned to avoid decades ago.  I could spout a freshet of theory about it, but instead I&#8217;m just going to utter a maxim: <b>Never confuse structure with meaning</b>.</p>
<p><span id="more-1387"></span></p>
<p>When you parse an XML or HTML document into a DOM, you&#8217;re not getting meaning.  You&#8217;re only getting structure.  The DOM structure.  And by doing that, you add a kind of dependency to your code that it didn&#8217;t have before &#8211; you become vulnarable to changes in the document&#8217;s parse structure that don&#8217;t change the meaning and wouldn&#8217;t have bitten you if you had stuck to doing local pattern-matching.  </p>
<p>That may be an acceptable or even necessary risk if the meaning you&#8217;re trying to extract is closely tied to the structure of the document. If what you&#8217;re looking at is pure high-church XML, that&#8217;s often the case.   But HTML?  It&#8217;s tag soup.  The structure the DOM tries to capture may not be well-formed at all.  Even if it is, some UI designer fiddling with presentation-level tags can easily mutate the structure in a way that that points your beautiful theoretically-neat XPath queries off into la-la land.</p>
<p>Yes, sometimes lxml or BeautifulSoup is the right thing.  I&#8217;ll probably use lxml when I get around to writing the parser for the XML state-dump format I&#8217;ve started to define.  That will be appropriate, because the generators for that format can guarantee well-formedness and aren&#8217;t going to be changed casually by UI designers who innocently believe they&#8217;re doing no harm.  </p>
<p>But that&#8217;s a rather different use case from HTML generated by someone else&#8217;s code.  It still could be that DOM-based parsing is the smart thing, if the HTML is stable and the generator was designed by somebody fastidious.  Best not to count on it, though.  Here&#8217;s an example of why&#8230;</p>
<p>At one point in my code, I have to parse HTML that presents as a two-column table on a bug index page.  First column is bug IDs, wrapped in anchor markup so they hotlink to bug detail pages.  Second column is the bug summary.  This table is embedded in huge amounts of gorp &#8211; page headers, page footers, a sidebar, various text annotations.  All I care about is the bug IDs, though.  I just want a list of them.</p>
<p>If I did what my unwise critic says is right, I&#8217;d take a parse tree of the entire page and then write a path query down to the table cell and the embedded link.  Which would be cute, and I could do that, and I&#8217;m sure code like that got him an A in college &#8211; but would leave me shit out of luck the second after, say, anything in the page&#8217;s  top-level structure changed.</p>
<p>So instead, I walk through the page looking for anything that looks like a hotlink wrapping literal text of the form #[0-9]*.  Actually, that oversimplifies; I look for a hotlink with a specific pattern of URL in a hotlink that I know points into the site bugtracker.</p>
<p>Now, ask yourself: what&#8217;s more likely to remain stable: the tag soup on the page, or the path structure of the forge site? Which is the more reliable cue to the data I actually want to extract?</p>
<p><b>Never confuse structure with meaning.</b></p>
<p>Sometimes, the brute-force hack-at-it-with-regexps approach really is best.  It looks stupid, but it gets the job done.</p>
<p>CORRECTION: The snotty kid (or snotty-kid soundalike) isn&#8217;t from Y Combinator.  That&#8217;s actually a relief &#8211; I know Paul Graham, I like Paul Graham, and the crew around him usually has more sense.  Anyway, this post was supposed to be about the critic&#8217;s mistake, not the critic.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1387</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Announcing ForgePlucker</title>
		<link>http://esr.ibiblio.org/?p=1369</link>
		<comments>http://esr.ibiblio.org/?p=1369#comments</comments>
		<pubDate>Thu, 05 Nov 2009 03:50:59 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1369</guid>
		<description><![CDATA[I&#8217;ve been strongly hinting in recent blog entries that I planned to do something concrete about the data-jail problems of present open-source hosting sites.  Because I believe in underpromising and overperforming, I decided at the outset not to announce a project until I could not only show working code, but code with wide enough [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been strongly hinting in recent blog entries that I planned to do something concrete about the data-jail problems of present open-source hosting sites.  Because I believe in underpromising and overperforming, I decided at the outset not to announce a project until I could not only show working code, but code with wide enough coverage to make it crystal-clear that the project goals are achievable  with a relatively modest amount of effort.</p>
<p>That time has arrived.  I am very pleased to announce <a href="http://home.gna.org/forgeplucker/">ForgePlucker</a>, a project aimed at developing project-state extractor software for backup, offline analysis, and (eventually) re-importation.  The proof-of-concept code can extract complete issue-tracker state from Berlios, Gna!, or Savane &#8212; and issue trackers are probably the hardest part of the job.  I expect extraction of repository histories and developer permissions tables to be easier.  Extraction of mailing-list state  is probably a bit trickier than either of those, but doable.</p>
<p><span id="more-1369"></span></p>
<p>The code as it exists now is just 1100-odd lines of pure Python; it can dump tracker state in either JSON or an XML format.  Notice that this is already a production-ready tool for, among other things, examining bug lists offline. One of the goals in the project plan is: useful tools at every step of the way. This is <em>not</em> going to be a project where the developers toil in obscurity for years until releasing Epic Code That Changes Everything; the project plan lays out smaller deliverables that can be used to build cooperation with forge-system designers and other people interested in some of the data-transport problems associated with forges.</p>
<p>Accordingly, I&#8217;ve actually put as much effort into documentation than I have into code &#8211; there&#8217;s a project plan, a HOWTO on writing forge handler classes, and even a draft ontology of forge state we can use to translate among the data models of different forges.</p>
<p>Yes, I&#8217;m looking for co-developers.  What the project especially needs is people interested in taking responsibility for developing and maintaining the handler classes associated with different forge types.  Presently, I own the Savane and Berlios handlers; I&#8217;d like to give those away so I can concentrate on the framework code, and I hope to recruit owners for SourceForge, GForge/FusionForge, Launchpad, and Trac.</p>
<p>There&#8217;s lots of interesting work to be done here.  Much of it will be code, some of it will be standards and documentation. Relevant skills and technologies include Python, JSON, RDF, HTTP forms, web-scraping, test-driven development. As always, being highly motivated to address the problem is more important than knowing any specific toolset at the outset.  I expect this project to be genuine fun; it breaks naturally into small substeps on which you get rapid feedback at each stage, and testing for correctness will be relatively easy.</p>
<p>Once we field a forgeplucker that can pull complete project state off a suitably wide variety of forges, it will be time to think about tackling the re-import problem.  We may solve that by bolting importers onto existing forge systems one by one, or by launching a forge-development project that builds on our extractor tools.  Another direction we might go in is supporting scripted interaction with these systems.  At every stage, useful tools!</p>
<p>To participate, get an account on <a href="http://gna.org">Gna!</a> and apply to join ForgePlucker. You can also examine the <a href="https://gna.org/svn/?group=forgeplucker">source-code repository</a> and l<a href="https://gna.org/task/?group=forgeplucker">list of open tasks</a>.  You will probably want to join the mailing list.  I&#8217;m planning to set up an IRC channel as well.</p>
<p>(Yes, I&#8217;d rather have used a distributed VCS; I did my proof-of concept in Mercurial. But Subversion is the best we can do on Gna!, where I have the advantage of being a site administrator.)</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1369</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>The future of software forges</title>
		<link>http://esr.ibiblio.org/?p=1359</link>
		<comments>http://esr.ibiblio.org/?p=1359#comments</comments>
		<pubDate>Fri, 30 Oct 2009 01:39:42 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1359</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<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>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1359</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Hacker superstitions about software licensing</title>
		<link>http://esr.ibiblio.org/?p=1350</link>
		<comments>http://esr.ibiblio.org/?p=1350#comments</comments>
		<pubDate>Mon, 26 Oct 2009 13:51:52 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1350</guid>
		<description><![CDATA[Hackers have a lot of odd superstitions about software licensing.  I was reminded of this recently when a project maintainer asked me whether he needed to get a sign-off from each and every one of his contributors before switching from Apache v1 to Apache v2.  Here&#8217;s  what I told him:
My opinion is [...]]]></description>
			<content:encoded><![CDATA[<p>Hackers have a lot of odd superstitions about software licensing.  I was reminded of this recently when a project maintainer asked me whether he needed to get a sign-off from each and every one of his contributors before switching from Apache v1 to Apache v2.  Here&#8217;s  what I told him:</p>
<p>My opinion is this.  Under U.S. law &#8212; and I believe European codes are not different in this respect, because both are controlled by the Berne convention &#8212; a license change on a collection is grounds for protest or legal action only if the rights of the contributors are materially affected by the change.  That is, a court would have to be persuaded that the change caused a monetary loss or at least damage to a contributor&#8217;s public reputation.  If there is no such possibility, then there is no harm and no grounds for complaint.</p>
<p><span id="more-1350"></span></p>
<p>It is clear that there is such a claim when a license is changed from open source to proprietary, or from proprietary to open source, without the author&#8217;s consent (the legal categories that apply are &#8220;unjust enrichment&#8221; and perhaps &#8220;conversion&#8221;). But no such claim can plausibly be made about Apache v1 to v2.  A court would laugh at you if you tried.  The applicable rule in English and American common law is called &#8220;De minimis non curat lex&#8221; &#8211; &#8220;The law does not concern itself with trifles.&#8221;</p>
<p>I think the closest an open-source license change might come to meeting the &#8220;materially-affected&#8221; test would be a change from an infectious license like GPL to a non-infectious one.  Even that, I think, is doubtful.</p>
<p>Hackers have some weird superstitions in this area &#8211; they behave as though they think modifying a license even trivially is some sort of soul-stealing evil voodoo against the person who attached it, and they think the law treats license attachments as sacred and immutable.  It doesn&#8217;t &#8211; certainly not for collective works.</p>
<p>So I&#8217;m telling you that you may have gone beyond what the law requires by asking about the GPL-to-Apache-v1 license change, and you are <em>certainly</em> beyond it in worrying about Apache v1 to v2,</p>
<p>I think you did right in respecting hacker customs by going beyond the law in the first case, but to worry about the second would be excessive.</p>
<p>UPDATE: Yes, the maintainer had previously changed the project from GPL to Apache v1.  Then, another project that he wanted to amalgamate code with switched to Apache v2.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1350</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Fearing what might be true</title>
		<link>http://esr.ibiblio.org/?p=1337</link>
		<comments>http://esr.ibiblio.org/?p=1337#comments</comments>
		<pubDate>Fri, 23 Oct 2009 20:36:27 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1337</guid>
		<description><![CDATA[I am not generally unhappy with my model of how the universe works.  Yes, it would be pleasant if there really were a beneficient creator-god and an afterlife; it would be nice if &#8220;good government&#8221; were actually a sustainable possibility rather than a fond but deluded hope in the minds of statists;  it [...]]]></description>
			<content:encoded><![CDATA[<p>I am not generally unhappy with my model of how the universe works.  Yes, it would be pleasant if there really were a beneficient creator-god and an afterlife; it would be nice if &#8220;good government&#8221; were actually a sustainable possibility rather than a fond but deluded hope in the minds of statists;  it would be just peachy if wishes were horses and everybody could be happy and rich.  But I&#8217;m reconciled to these things being not true because it seems to me they are <em>necessarily</em> not true &#8211; that is, for example, I cannot imagine a universe in which the actual existence of an intervening creator-god is actually compatible with the observed regularity of natural law, nor a universe in which scarcity  and agency problems do not imply that governments are subject to the <a href="http://esr.ibiblio.org/?p=984">iron laws of political economics</a>. </p>
<p>Other people can imagine theism or statism to be true, and so could I at one time &#8211; before I understood enough to grok the  contradictions they would entail.  But I&#8217;m not actually writing to argue for anarchism or atheism today; I brought those up as examples to make a more subtle point. It seems to me it&#8217;s actually more difficult to deal with unpleasant possible truths that are only contingent, because you can imagine how things could be different if you lived in a universe that was slightly different but recognizable.</p>
<p>I&#8217;ll give two examples of this that I&#8217;m still struggling with.  One: I fear feminism may be dangerously wrong.  Two: I fear that the crowd calling for the abolition of all forms of intellectual property may be dangerously right.</p>
<p><span id="more-1337"></span></p>
<p>I like living in a society where women are, generally speaking, as free to choose their own path in life as I am.  I like strong women, women who are confident and look me in the eye and see themselves as my equals. But I wonder, sometimes, if sexual equality isn&#8217;t doomed by biology.  The relevant facts are (a) men and women have different optimal reproductive strategies because of the asymmetry in energy investment &#8211; being pregnant and giving birth is a <em>lot</em> more costly and risky than ejaculating, and (b) a woman&#8217;s fertile period is a relatively short portion of her lifetime.  Following the logic out, it may be that the consequence of sexual equality is demographic collapse &#8212; nasty cultures which treat women like brood mares are the future simply because the nice cultures that don&#8217;t do that <em>stop breeding at replacement rates</em>.  </p>
<p>I&#8217;ve written before about how property rights are underpinned by Schelling points &#8212; places where the cost of rights enforcement rises discontinuously, creating boundaries that rival claimants can agree on even if they can&#8217;t signal each other reliably.  I&#8217;m disturbed by the fact that even though I&#8217;ve been thinking about the matter for years, I haven&#8217;t found any Schelling points in the theory of IP rights that look really stable.  This suggests that the IP abolitionists may win the argument in the end.  That could be very bad, because there are important kinds of creative work I don&#8217;t see how to fund without IP rights that allow creaters to capture positive externalities.  I&#8217;m not worried about software, because that can be funded from its value as an intermediate  good; I&#8217;m worried about music and novels and artistic goods with economics like those.</p>
<p>The difference between these two cases and my first two is this: I know nothing about the universe that makes it impossible that women should have longer fertile periods.  And there might be Schelling points in IP that I haven&#8217;t found yet because I&#8217;m looking in the wrong places. I hope so, anyway. </p>
<p>I haven&#8217;t gone into depth about any of these arguments because the specific beliefs I&#8217;m examining are not really the point of this essay, and you can&#8217;t address my issue by attacking them (that&#8217;s a hint to commenters, yes indeed it is!). What I&#8217;m actually poking at here  is the nexus among belief, emotion, and imagination.  The question  I <em>would</em> like to hear from commenters about is this: If there is something that you don&#8217;t want to be true, but  fear might be, and (like me) you&#8217;re pretty compulsive about following the evidence and the logic even if it leads you to unpleasant conclusions &#8212; how do <em>you</em> cope?  </p>
<p>Am I alone in feeling like unpleasant but necessary truths are easier to live with than unpleasant but contingent ones, or does this tell us something general and interesting about the psychology of belief maintainence?</p>
<p>UPDATE: Some people have gotten the wrong impression.  I didn&#8217;t ask &#8220;How do <em>you</em> cope?&#8221; because I&#8217;m having an existential crisis or anything, it&#8217;s that I&#8217;m curious about the range of cognitive and emotional strategies involved. I&#8217;m an engineer, I cope by finding the largest problem I can wrap my head around and attacking it with vigor; if we all do that, maybe we&#8217;ll win. It could be said that my strategy for emotional coping is  &#8220;don&#8217;t be passive&#8221;. </p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1337</wfw:commentRss>
		<slash:comments>205</slash:comments>
		</item>
		<item>
		<title>Public Space in Cyberspace</title>
		<link>http://esr.ibiblio.org/?p=1332</link>
		<comments>http://esr.ibiblio.org/?p=1332#comments</comments>
		<pubDate>Wed, 21 Oct 2009 05:14:41 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1332</guid>
		<description><![CDATA[Following my post Condemning Censorship, Even of Werewolves, a great many people took me for task for trying to make a principled distinction between public space and private space, and tangled that up with a lot of confusion about the distinction between &#8220;public&#8221; and &#8220;state-owned&#8221; space.  Here I&#8217;ll attempt to shed some light on [...]]]></description>
			<content:encoded><![CDATA[<p>Following my post <a href="http://esr.ibiblio.org/?p=1310">Condemning Censorship, Even of Werewolves</a>, a great many people took me for task for trying to make a principled distinction between public space and private space, and tangled that up with a lot of confusion about the distinction between &#8220;public&#8221; and &#8220;state-owned&#8221; space.  Here I&#8217;ll attempt to shed some light on the matter.  In doing so, I will not actually be retailing a private theory of mine, but touching on principles with a long history in ethics and Anglo-American common law.</p>
<p><span id="more-1332"></span></p>
<p>Suppose I privately own a road which is the only access to your property.  Can I bar you from using it?  My principles say no. Ancient common law says no.  Current U.S. law says no.  I may charge a fee, but it must be reasonable in light of my maintainance costs and local market conditions, and it must be waived in emergencies.</p>
<p>A lot of people interpret this doctrine as an assertion of social ownership of the roads, but there is a different ethical basis for it shared by libertarians and Anglo-American common law.  That is: the law should not be interpreted to further privilege power relationships that are already asymmetrical.  Where they conflict, we should be more scrupulous about the rights of weak parties than of strong ones.</p>
<p>If you own a private club, should you be permiitted to bar blacks or women?   Current U.S. law says no. Ancient common law is silent.  I say, yes, you should be so permitted, even though I consider such discrimination odious.  The difference is, <em>that</em> kind of law intrudes into your personal choices in ways that allowing someone to use your road does not.</p>
<p>Can you bar individuals from your residence because they are black or female?  Yes. Current U.S. law, ancient common law, and I all agree that a homeowner has a right to control personal space that trumps other claims.</p>
<p>Now let&#8217;s go to cyberspace.    How do these principles apply to defining public space there?  In particular, how can we distinguish in a principled way between blogs, public forums, and project-hosting  sites such as SourceForge?</p>
<p>The right decision procedure here is to think about what the power relationships are, and which choices avoid infringing personal space while also avoiding placing further burdens on weak parties.  Matters are simplified by the absence of state ownership, so no confusion between public space and government-controlled space is at issue.</p>
<p>A blog is like a private home controlled by a single owner.  Treating it as private space imposes no undue burden on guests, because their investment in the content is minimal.  They may of course, leave comments, but the comments have value primarily as a reflection of or comment on the owner&#8217;s posts.  Little or no harm  is associated with being banned.  In this case it is easy to say &#8220;private space&#8221;.</p>
<p>A forum is like a club. Some are private and specialized, others more open. The value of the posts in a forum is a joint creation of the members; no individual member normally contributes more than a small fraction. Harm from being banned varies from none to significant, depending on the value of the forum social network.  I could do a more extended analysis of how different forums with different traditions imply different rights analyses, but I&#8217;m going to pass over that to get to what I think is the interesting case.  I&#8217;ll say as a placeholder that I think the public-or-private answer depends contingently on the history and social norms of the forum community and can go either way.</p>
<p>A project-hosting or forge site is very different from either case.  The most important difference is that the site acts, in effect, as a gatekeeper for access to the user&#8217;s own property &#8211; the source-code repositories and other project data.  The user&#8217;s investment is high, and harn from being banned can be severe &#8211; in the worst case, even a diligent user may lose work that is backed up nowhere else (e.g. commits since the last backup, project mailing lists, etc.).  The analogy of a private road controlling access to a weaker party&#8217;s property is strong, and the same remedy applies, which is to restrict the putative owners from taking actions which further burden the weaker party. </p>
<p>If I were running a hosting site like SourceForge, I would make sure that my ban procedure included burning copies of the user&#8217;s content onto CD-ROMs and shipping them to his/her contact address.  Otherwise, I think I could be sued successfully for destroying property that is not mine. My wife the attorney agrees this would be fair and prudent.</p>
<p>The social expectations around a hosting site also matter.  These are, normally, chartered to a particular community.  SourceForge&#8217;s, for example, is held forth as being open to all projects with licenses conforming to the Open Source definition; Alioth is for Debian developers; Savannah primarily for FSF and FSF-approved projects.  Such representations have ethical weight, and courts do not ignore them when a dispute goes to law.   If I were running any of these sites, I would consider violation of the traditional norms of my user community to be not just a public-image problem but a multiplier to my risks in the event of a lawsuit.</p>
<p>There are also relevant precedents with respect to community bulletin boards hung in supermarkets, which I know about because I was an individial amicus in the Supreme Court&#8217;s hearing on the Communications Decency Act back in 1996. If you are a supermarket and hold forth the bulletin board as being for community use, you are essentially barred from censoring in a content-sensitive way except as required by laws relating to obscenity, felonious threats, and other criminal speech.</p>
<p> I trust it is now clear why I have asserted that forge sites are not private space within the meaning the term has in common law and reasoning about speech rights.  This does not mean the owners can&#8217;t shut them down, but it does mean that while they are running, the rules of public space &#8211; or, perhaps more specifically, the public thoroughfare &#8212; apply.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1332</wfw:commentRss>
		<slash:comments>82</slash:comments>
		</item>
		<item>
		<title>Condemning Censorship, Even of Werewolves</title>
		<link>http://esr.ibiblio.org/?p=1310</link>
		<comments>http://esr.ibiblio.org/?p=1310#comments</comments>
		<pubDate>Mon, 19 Oct 2009 08:39:05 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1310</guid>
		<description><![CDATA[Thomas Paine once wrote: &#8220;He that would make his own liberty secure must guard even his enemy from oppression; for if he violates this duty he establishes a precedent that will reach to himself.&#8221;   Paine&#8217;s truth is not idealistic handwaving, it is brutal pragmatism.  Justifications for censorship, even the best-intentioned kind, have [...]]]></description>
			<content:encoded><![CDATA[<p>Thomas Paine once wrote: &#8220;He that would make his own liberty secure must guard even his enemy from oppression; for if he violates this duty he establishes a precedent that will reach to himself.&#8221;   Paine&#8217;s truth is not idealistic handwaving, it is brutal pragmatism.  Justifications for censorship, even the best-intentioned kind, have a way of  expanding until they become instruments of abuse.  Therefore, if we truly care about freedom of speech, it is not sufficient to defend that freedom when it is comfortable to do so &#8212; when the censors are ugly  and the victim is appealing. It is necessary, sometimes, to speak up in defense  of <em>ugly</em> victims of censorship.   </p>
<p>I have found myself placed under that necessity in the last week.  A member in good standing of the open-source community, one Beth Lynn Eicher, had sought and achieved the suppression of public speech by one Mikhail Kvaratskhelia, aka &#8216;mikeeeUSA&#8217;, aka serveral other aliases.  When I first approached her privately on the matter, she refused to apologize or retract.  In my judgment, she was committing a crime against our community&#8217;s future by setting a precedent which might one day reach to all of us.</p>
<p>This put me in a difficult position. I had received an explicit appeal for redress in my capacity as  one of our tribal elders, and I felt the appeal was in the right and Ms. Eicher in the wrong.  But I knew &#8212; for various reasons which will become very clear &#8212; that making that case would involve me in a batter and divisive wrangle.   I was prepared to do it anyway, because my conscience would not permit otherwise, but I knew it was going to be hell.  </p>
<p>Fortunately, after several days of debate among myself and some friends of mine who leapt to Ms. Eicher&#8217;s defense, Ms. Eicher  proved to be cleverer than either them or me.  While Ms. Eicher&#8217;s defenders were still flaming me for intransigence on the free-speech issue, she  designed a solution  which I consider totally appropriate, and which I actually <em>hope</em> will set a precedent.</p>
<p><span id="more-1310"></span></p>
<p>Mikhail Kvaratskhelia is what constitutional lawyers sometimes call a werewolf &#8211; the most unappealing possible victim.  He is a creepy, repellent, misogynistic crank, given to uttering threats of violent death against female Linux hackers, and quite possibly clinically insane.  I first became aware of his existence last week when he sent a long letter of complaint to Richard Stallman, Linus, Bruce Perens, and myself asserting that his speech rights had been trampled on and linking to blog entries by Ms. Eicher and one other person. The letter was disturbing &#8211; intelligent in a feral way, but unhinged.</p>
<p>I was eyeball-deep in a new coding project; I read both blog posts, finding the story therein sad and troubling.  Kvaratskhelia had posted level maps for a first-person-shooter game called Nexuiz on SourceForge; possibly also executable code, the accounts are unclear.  The accounts concur that the maps contained violent imagery and slogans attacking women&#8217;s rights, and this creep&#8217;s ugly and hate-filled letter leaves me in no doubt that the maps were ugly and hate-filled as well.</p>
<p>I did not pursue  the matter until RMS replied on 15 October asking whether Kvaratskhelia had made backups of the censored material. I thought this was a sensible question; it was the first one that had  occurred to me, anyway.  Following this, I searched the web for relevant material (I had deleted Kvaratskhelia&#8217;s letter rather quickly &#8211; my eyeballs felt soiled by it) and found  Ms. Eicher&#8217;s original blog entry.  I felt, at that point, the pricking of my conscience for not having responded to Kvaratskhelia&#8217;s earlier complaint immediately.  I wrote Ms. Eicher an email condemning the suppression of speech and expressing my judgment that she owed Kvaratskhelia an apology for her suppressive conduct &#8211; which she refused to do.</p>
<p>This is not, at first blush, a situation in which the law offers much guidance.  Censorship in the strictest sense is not involved, as no government force or threat of force was involved in the suppression.  SourceForge was within its property rights and terms of service to delete the offensive material, and there was certainly no law barring Ms. Eicher from asking that they do so. My position was nevertheless that Ms. Eicher&#8217;s specific request for suppression of Kvaratskhelia&#8217;s public speech was, though within the law, consequentially and ethically wrong, because it set a precedent legitimizing suppression of public speech as a political tool. </p>
<p>Ms. Eicher, and her friends, maintained that her action was justified by the death threats  that  Kvaratskhelia has been uttering since 2005.  Taking them at their word about the facts, I agree that those threats were gravely wrong, injurious, and probably criminal. But the material on SourceForge that was actually censored is not represented to have constituted a death threat, merely a political argument that Ms. Eicher and her friends found obnoxious.  I am pretty sure I&#8217;d have found it obnoxious myself&#8230;but on this, law and ethics are both clear.  Nazis threaten death to Jews, but they can march in Skokie anyway &#8211; the mere fact that one has an ideology that is crazed and bigoted and potentially violent does nothing to dissolve or abrogate one&#8217;s free-speech rights.  Nor should it.  The rules of engagement that protect mikeeeUSA&#8217;s right to utter controversial political speech are the same rules that protect Ms. Eicher&#8217;s; we cannot deny one without the other.</p>
<p>And as for violent misogyny in games &#8211; I remember what side most of the hacker community was on in the running PR and legal battles over Grand Theft Auto. I think that was the right side to be on, and any of us who would choose the side of the censor now, simply because it&#8217;s one of <em>our</em> people demanding suppression instead of some grandstanding redneck DA, would be at best succumbing to special pleading and at worst an outright hypocrite. </p>
<p>I was (and am) not happy about appearing to defend  Kvaratskhelia.  To judge by the letter and the reports of his past behavior, he is a vile piece of scum; if he were to threaten harm to Ms. Eicher in my presence, I would cheerfully shoot him.  But the way to deal with death threats is to (a) report them to law enforcement, and (b) be prepared to defend yourself against the very likely contingency that the authorities won&#8217;t be around when you need them. It is not to seek suppression of the threatener&#8217;s public speech.  By doing that, Ms. Eicher put herself in the wrong; worse, she put this odious character &#8212; at that moment, and on this issue &#8212; in the right.</p>
<p>For, if we deem suppressing his speech acceptable, where does it stop?  Today it&#8217;s tirades against sexual equality that are supposed to accept as bad enough to warrant booting someone off a hosting site.  But tomorrow, what will it be?  Advocating restrictions  on abortion?  Denying global warming? Dissing vegetarians? Wearing fur? The precedent Ms. Eicher apparently wanted us to accept, whether she intended it or not, would have been unacceptably dangerous to liberty in general and our community in particular.</p>
<p>The hacker culture is more delicately dependent on the unfettered flow of creativity and conversation, more functionally threatened by the possibility of systematic censorship, than any other I can think of in human history.  Thus, our need and our responsibility to defend freedom of expression &#8212; even when we find it uncomfortable, even when it&#8217;s being exercised by werewolves &#8212; becomes greater rather than less.  We cannot hold ourselves to <em>lower</em> standards than a court interpreting the First Amendment would apply; if the Nazis can march in Skokie, we must respect mikeeeUSA&#8217;s right to make vile political arguments in our public spaces.  Ms. Eicher&#8217;s blog is not a public space, but SourceForge was intentionally designed to function as one and our community uses it in that way; thus, the rules of the public square apply. </p>
<p>I was very concerned that Ms. Eicher&#8217;s original action <em>not</em> become a precedent for how we deal with trolls and nutjobs in the future. For if we censor public speech in aid of our own political positions, we forfeit the right to object when others censor our public speech in aid of theirs.  There is only one place that road can end, and it&#8217;s not anywhere we want to be.</p>
<p>That was why I might have ended up in a very ugly, very public fight over this.  But while others where flaming, Ms. Eicher was listening.  And thinking, to far better effect than the flamers. Just a few few hours ago, without consulting me, she <a href="http://whatwillweuse.com/about/terrorware/">undertook to host the offending material herself</a>.   This is what I had to say when I learned of this:</p>
<blockquote><p>
Ms. Eicher, *well done*!  A creative and even brilliant solution!</p>
<p>Hosting the creep&#8217;s stuff with a loud warning that it is vile and possiblly criminal attached to it is *exactly* the correct response! *Exactly*!</p>
<p>The best remedy for hate speech is not suppression of that speech but counterpropaganda that makes the hater look both vile and ridiculous. The fact that you publicly held yourself out as an offended party gives the act of turning around to host his stuff even more force as a gesture of both contempt for him and principled opposition to censorship than it would have had otherwise.</p>
<p>Yes, host his stuff.  And, I advise, mock him mercilessly.  Don&#8217;t dignify the filth on your disks with sober hatred; *laugh* at the poisonous fuckwit. Your choice makes you larger than him; grind that in mercilessly.  </p>
<p>I can live with a community rule that if you successfully have someone&#8217;s stuff booted from a public space for vileness, custom requires you to carry it yourself. But don&#8217;t drop the ball.  Honor now demands that you host it as reliably as your own content.</p>
<p>Now I will post about this, but instead of condemning you for setting a bad precedent, I will praise you for setting a good one.  It is ethically, rhetorically, and pragmatically perfect; the only tiny cloud on my happiness is that I wasn&#8217;t imaginative enough to think of it myself.
</p></blockquote>
<p>I&#8217;ll add one point to that now. In an ironic and lovely way, Ms. Eicher&#8217;s sacrifice of her own disks and bandwidth to carry Kvaratskhelia&#8217;s misogynist crud is exactly the apology and retraction I originally hoped for &#8212; but delivered in a way that will give the creep no comfort in the end.  I really could not ask for a better outcome.</p>
<p>Ms. Eicher has earned my respect for avoiding the harm of censorship, and my personal gratitude for navigating us both out of a collision neither of us wanted.  And I hope her solution will indeed set a precedent that will enable us to never, <em>ever</em> advocate the suppression of public political speech, no matter how vile we find it.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1310</wfw:commentRss>
		<slash:comments>203</slash:comments>
		</item>
		<item>
		<title>How Not To Tackle the Mess around Forges</title>
		<link>http://esr.ibiblio.org/?p=1302</link>
		<comments>http://esr.ibiblio.org/?p=1302#comments</comments>
		<pubDate>Tue, 13 Oct 2009 03:44:03 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1302</guid>
		<description><![CDATA[In my previous two posts I have diagnosed a significant weakness in the open-source infrastructure.  The architecture of the code behind the major SourceForge-descended hosting sites is rotten, with all kinds of nasty consequences &#8212; data seriously jailed, poor or completely absent capabilities near scripting and project migration.  I said I was going [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous two posts I have diagnosed a significant weakness in the open-source infrastructure.  The architecture of the code behind the major SourceForge-descended hosting sites is rotten, with all kinds of nasty consequences &#8212; data seriously jailed, poor or completely absent capabilities near scripting and project migration.  I said I was going to do something about it, and I&#8217;m working the problem now &#8212; actually writing code.  </p>
<p>The rest of this post is not an announcement, because it will be mostly about things I&#8217; have figured out I should <em>not</em> try to do.  Yet.  But it is a teaser.  I see a path forward, and shortly I expect to have some working code to exhibit that shows the way.  Actually, I have working code that attacks the problem in an interesting way <em>now</em>, but I&#8217;m still adding capabilities to make it a more impressive demonstration.</p>
<p>Here are some approaches I&#8217;ve considered, or had suggested to me by others, and rejected:</p>
<p><span id="more-1302"></span></p>
<p>1. <b>Write a new forge system, focused on import/export and scriptability, from scratch.</b>   Tempting, but no.  That would divert my energy for many months while the problem that originally exercised me &#8212; the data-jail effect &#8212; went unsolved.  The first priority has to be jailbreaking the data in existing systems, </p>
<p>2. <b>Rebuild Savane from the inside.</b> Also tempting, and theoretically possible; I have developer privileges on that project, and it&#8217;s moribund &#8211; no commits in like two years. If I wanted to take it over, I probably could. Between <a href="https://gna.org/">gna.org</a> and <a HREF="http://savannah.gnu.org/">Savanna</a> it has a pretty large userbase, enough to give a functional rewrite serious cred.  But, again, it would divert me from my original gripe, which was the data-jail problem.  Also, Savane&#8217;s architecture inherits the <a href="http://esr.ibiblio.org/?p=1295">curse of SourceForge</a>; trying to fix it while preserving its exact appearance and functionality would be painful in the extreme.</p>
<p>3. <b>Finish the SOAP API in FusionForge, the most widely deployed &#8216;modern&#8217; descendant of SourceForge.</b> I&#8217;m a now project member there, though they haven&#8217;t given me commit privileges yet.  I could fix their SOAP services API.  The trouble is, their code is a disaster area worse than Savane&#8217;s &#8212; layers upon layers of cruft, so poorly integrated and maintained that their source tree <em>doesn&#8217;t even have a working &#8220;make install&#8221;!</em>  I was told with a straight face that the preferred way to set up a running instance from source is to build a Debian binary package file from it and install the package.  Oh, and just to put the cherry on top, something is broken in their repository &#8212; I couldn&#8217;t check out a complete source copy without running into some bizarre permissions-related error that hung my Subversion client, eating 100% of my processor.   These failures cause me to doubt that the project is sufficiently well run to be a good investment of my time.</p>
<p>4. <b>Write a data-interchange standard, then jawbone existing forges into implementing exporters that speak it.</b>  This is what the crowd of research types around COCLICO in France wants to do.  I think it&#8217;s a doomed effort; if the &#8216;existing systems&#8217; had a strong enough architecture to support export capabilities that don&#8217;t suck we probably wouldn&#8217;t have this problem in the first place.  On top of that there&#8217;s the problems that writing an exporter for an existing forge requires intimate knowledge of the festering crap behind the web interfaces, and deploying it would require install privileges on the forge site.  Ain&#8217;t going to happen &#8212; the site admins will, quite justifiably, wonder what the point of disturbing their running installations and accepting the inevitable security risks is when <em>nothing yet exists that can read the exports!</em> COCLICO&#8217;s is a typical over-ambitious academic approach in which you have to solve everything before it solves anything&#8230;.</p>
<p>If these approaches won&#8217;t work, what will?</p>
<p>It&#8217;s too soon to try to prescribe a standard data-interchange format for forges, but it&#8217;s not too soon to write tools that jailbreak the data out of forges and dump it in formats that are forge-type-specific but human-readable &#8212; self-describing JSON or XML dumps, rather than binary blobs.  </p>
<p>Also, an ugly fact has to be faced &#8212; because of the PHP+SQL mess inside these things, the only viable approach to extracting the data out of them is to use the same web interfaces humans do.  Once you&#8217;ve faced that fact, though, and realized you&#8217;re going to have to build a very smart robotic web scraper, the approach solves a significant set of problems.  Most notably, it requires neither cooperation nor competence from any forge site administrators, anywhere.</p>
<p>That&#8217;s enough hints.  You&#8217;ll hear from me on this next when I announce some working tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1302</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Looking Deeper into Forges, And Not Liking What I See</title>
		<link>http://esr.ibiblio.org/?p=1295</link>
		<comments>http://esr.ibiblio.org/?p=1295#comments</comments>
		<pubDate>Fri, 09 Oct 2009 23:09:53 +0000</pubDate>
		<dc:creator>esr</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://esr.ibiblio.org/?p=1295</guid>
		<description><![CDATA[In my previous post, Three Systemic Problems With Open-Source Hosting Sites I identified some missing features that create serious brittleness in or project-hosting infrastructure.  The question naturally arises, why don&#8217;t existing hosting systems already have these facilities?  I have looked into this question, actually examining the codebases of Savane and GForge/FusionForge, and the [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous post, <a href="http://esr.ibiblio.org/?p=1282">Three Systemic Problems With Open-Source Hosting Sites</a> I identified some missing features that create serious brittleness in or project-hosting infrastructure.  The question naturally arises, why don&#8217;t existing hosting systems already have these facilities?  I have looked into this question, actually examining the codebases of Savane and GForge/FusionForge, and the answer appears to go back to the original SourceForge.  It offered such exciting, cutting-edge capabilities that nobody noticed its internal architecture was a tar-pit full of nasty kluges.  The descendants &#8212; Savane, GForge, and FusionForge &#8212; inherited that bad architecture.</p>
<p><span id="more-1295"></span></p>
<p>The central problem is implied by the implementation.  It&#8217;s PHP pages doing SQL queries to a MySQL database.  The query logic is inextricably tangled up with the UI.  There is no separation of function! Now I understand why, back when I was a director at VA Linux, the original SourceForge team promised me a scriptable release process but never delivered.  They couldn&#8217;t have done it without either (a) duplicating a significant number of SQL queries in some kind of ad-hoc tool (begging for maintenance problems as the SQL schema changed) or (b) prying the SQL queries loose from the GUI and isolating them in some kind of service broker, either an Apache plugin or a service daemon, that both the web interface and a scripting tool could call on.</p>
<p>Approach (b) would have been the right thing, but would have required re-architecting the entire system.  It never happened.  When, in my problem statement, I complained of forge systems being excessively tied to Web interfaces, I did not yet know how horribly true that was.</p>
<p>The rottenness of the architecture also accounts, indirectly, for some other features of these systems that have long puzzled me &#8211; like the reliance on cron jobs to do things like actually creating  new project instances.  The cron jobs are a half-assed substitute for a real service broker.</p>
<p>I conclude that the SourceForge/GForge/FusionForge architecture, as it is now, is an evolutionary dead end &#8212; overspecialized for webbiness. To tackle challenges like fixing the data-jail problem, scripting, and seamless project migration, one of these systems will need to be rebuilt from the inside out.  The surface appearance of the GUI might survive at one end, and the SQL schema at the other, but everything &#8212; <em>everything</em> &#8212; between them needs to change.</p>
<p>As one of my regulars pointed out in commenting on the previous post, what we see here is a massive failure to apply the Unix philosophy.  It needs to be fixed.  I&#8217;m not sure what the best way to go about it is, though.  I&#8217;d love to start with a clean sheet of paper; our tools are ten years better now, and with Python and Django I could probably have a proof-of-concept within weeks and deliver a forge system functionally superior to anything now deployed in a couple of months tops.  The problem is, if I do that I have a serious political barrier to climb getting it deployed.  The alternative would be for me to rebuild an existing forge system from the inside &#8211; much more difficult, because I&#8217;d be dragging around a lot of legacy, but I&#8217;d get to keep the userbase and the brand.</p>
<p>One of these things looks likely to happen. I&#8217;m not sure which, yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://esr.ibiblio.org/?feed=rss2&amp;p=1295</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
	</channel>
</rss>
