<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>

<p>
<h2><font color="#cc6600" face="Courier New, Courier, mono" size="+2">Editor's Column</font></h2>
<p>23 January 2001</p>
<p><a href="//lspintro.html">-Louis Suarez-Potts</a></p>

<p><b>Community Action</b></p>
<p>A week ago, I had promised that I would embark this week on an examination 
  of other open-source projects, beginning with Apple's <a href="http://www.publicsource.apple.com//projects/darwin/">Darwin 
  project</a> (the core of Mac OS X). But the events of the last week have forced 
  me to postpone that examination. </p>
<p>No, I do not refer to George Bush's inauguration or to the demonstrations protesting 
  that event. Rather, I refer to what is closer to home: The very lively discussions 
  over the future functionality of OpenOffice.org that have animated the project's 
  &quot;discuss&quot; mailing list. In particular, I mean the thread &quot;Say 
  it isn't so,&quot; in which an enormous number of respondents, both technically 
  oriented and not, have weighed in with their arguments regarding OpenOffice.org's 
  incorporation of e-mail and calendering functionality.</p>
<p>The issue is of course important; however, I want in this column to focus less 
  on the good or bad of including such functionality than on the process by which 
  the OpenOffice.org community articulates its desires and interests (the thread 
  continues). That process, first, is definitively <i>civil</i>. There are no 
  flames; only a rational (and passionate) discussion of the pros and cons. Last 
  week, I <a href="ec16Jan01.html">suggested</a> that 
  an open-source community exists in dialectic relation with the governing body 
  (or whatever body articulates the rules and road maps). But the nature of a 
  dialectic is that it is not static: power shifts incessantly, the goals of any 
  open-source community never purely rest with the governing body but can always 
  be contested by an active community.</p>
<p>However, the OpenOffice.org community is not quite in the same situation as, 
  say, <a href="http://www.mozilla.org/">Mozilla.org</a>, on which I briefly touched 
  last week. Rather, as Brian Behlendorf (co-founder of Apache) wrote in response 
  to a message, &quot;there are no 'OpenOffice[.org] Foundation board members' 
  yet; Sun (in conjunction with others) is still working to determine the best 
  way to create a legal entity around OpenOffice.org that answers to the community.&quot; 
  This is not to say that there is no guidance or planning. There is: Sun and 
  CollabNet (who hosts the site) continue to devote an extraordinary amount of 
  time and energy to guiding the community. It is just that there is so far no 
  <i>formal</i> governing body. </p>
<p>Certainly, such a governing body will be necessary, if one of its functions 
  is to ensure the community holds to agreed-upon goals. But, from the evidence, 
  the OpenOffice.org community has been working in a way that demonstrates that 
  it is perfectly able to establish priorities and values on its own.</p>
<p>For what the &quot;Say it isn't so&quot; thread reveals is a community that 
  is powerfully engaged; not just working in passive isolation on abstruse code 
  but very concerned with and interested in how the user will actually benefit 
  from what they are doing. And it also shows that the developers are by no means 
  blind to the commercial and real-world elements of the projects they work on. 
  In fact, an acute recognition of the marketability of the software animates 
  the discussion and complements the equal recognition that the project will only 
  succeed if people actually <i>use</i> the products derived from OpenOffice.org.</p>
<p>I hesitate to relate the thread messages in full. Not only are there many, 
  but each is an intervention in a debate and was not written with the consciousness 
  that it might be featured here. However, for those interested, the URL for the 
  current &quot;discuss&quot; mail list is: <a href="//www-discuss/current/">//www-discuss/current/.</a></p>
<p>&nbsp;</p>
<h4>Previous columns</h4>
<p>3 January 2001 <i><a href="SunsOpenDoor.html">Sun's 
  open door</a></i></p>
<p>9 January 2001 <i><a href="thebuild.html">The 613 
  build:&nbsp; problems and opportunities</a></i></p>
<p>16 January 2001 <i><a href="ec16Jan01.html">Quo 
  Vadis OpenOffice.org?</a></i></p>
<p> 
<p>E-mail:<a href="mailto:louis at collab.net"> louis at collab.net*</a></p>
<p>*By spelling out the mail address, I'm hoping to defeat spam crawlers.</p>


</body>
</html>

