<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
 
<h2> Community 
  Articles: Opinions, Interviews, Analyses</h2>
<p><a href="//lspintro.html" target="_blank">-Louis Su&aacute;rez-Potts</a></p>
<p>23 April 2001</p>
<p>&nbsp;</p>
<p><b>Interview: Guy Capra </b></p>
<p>To anyone who has visited the OpenOffice.org discuss list in the last two months, 
  Guy Capra&#146;s name is familiar. He has spearheaded the movement to create 
  a section of OpenOffice.org, including a discuss list, where French-speaking 
  persons could obtain information about OpenOffice.org and Open Source in French. 
  The ultimate point: To encourage participation and contribution in OpenOffice.org 
  from all over the world. 
<p> Guy&#146;s persistence and vision has borne fruit, and as a result of his 
  and many others&#146; efforts, OpenOffice.org now has a <a href="http://native-lang.openoffice.org/" target="_blank">Native 
  Language Development project</a>, which currently houses the <a href="http://fr.openoffice.org/">Francophone 
  module</a> Guy is leading. 
<p> Over the space of a couple of days last week, I asked Guy about his background 
  and his thoughts on OpenOffice.org and Open Source. Guy responded in French 
  and English; I have translated, as best I could, the French into English. 
<p>&nbsp;
<p><i>You have been active in the French Internet scene for some while, what with 
  running &quot;<a href="http://www.creatique.online.fr" target="_blank">Creatique</a>,&quot; 
  and Sun's French StarOffice, and now OpenOffice.org (and of course, <a href="http://www.alomphega.com/" target="_blank">Alomphega</a>). 
  How did you get involved in the scene? Is your background in programming? </i> 
<p>
  Well, to explain the steps that led me to this project and motivations, I must 
  give you a brief account of my professional career. 
<p> I was, originally, not a programmer but a musician. I did study science at 
  school, but ended up following a line of classical education. I finished my 
  schooling in the region around Avignon, in the south of France, where I studied 
  contemporary music and composition. It was there, in the 1980s, that I discovered 
  the usage of computers in music, and the intersection of rational and creative 
  work, represented, say, by a permanent discussion between Albert Einstein and 
  Claude Debussy.
<p> After I received my first prize in music composition, a record company offered 
  me a position as a sound engineer in Paris. It was in this way that I was able 
  finally to realize my dream of that period, to become a music researcher at 
  France&#146;s prestigious center of electronic music, <a href="http://www.ircam.fr/" target="_blank">IRCAM</a>. 
  I worked there some years, moving between recording studios and the <a href="http://www.cnac-gp.fr/Pompidou/Home.nsf/docs/fhome" target="_blank">Centre 
  Pompidou [Beaubourg]</a>, and trying, with good and bad results, to produce 
  some important works on the creation of contemporary music. 
<p>
  It was during this time that I discovered that computer science (l&#146;informatique) 
  pleased me much more than creating music: in computer science, when one creates 
  a program, it functions or it doesn&#146;t, without any subjective intervention. 
  Soon enough, others came to appreciate my work, and eventually I gained some 
  success. But in the first place, for me, the reality of a work is purely pragmatic: 
  it only is as it does. Einstein, Debussy&#133; and now, William James: these 
  names trace the evolution of my thought. 
<p> Around this time, I met my wife, who is a fashion designer. At the beginning 
  of the 1990s, we decided to quit Paris and the artistic milieu, and move to 
  the Cote d&#146;Azur, the region of my birth, where we founded a small fashion 
  house. I had advanced in my knowledge of computer science, and with the rudimentary 
  tools available at the time, I believed that I could create an automatic system 
  that would allow us to offer clothing cut to measure from my wife&#146;s designs 
  at a price the greater public could afford.
<p> I became interested in the problematic of business because the municipality 
  of the small town where we lived, <a href="http://www.ot-hyeres.fr/" target="_blank">Hy&egrave;res-les-Palmiers</a>, asked me to work on communications for the local 
  union of small businesses. 
<p> Soon enough, the small businesses asked me to counsel them regarding their 
  computer equipment; and to develop for them adaptive management tools. It was 
  then that I officially declared my profession as being in IT (informatique) 
  and named my business &#147;Cr&eacute;atique (CREAtion InformaTIQUE,&#148; in 
  reference to our fashion house, which we had called &#147;Cr&eacute;ature (CREAtion 
  couTURE).&#148; 
<p>
  I made a point, in my work, to always supply my clients with the source code 
  of my programs, because I considered that I might arrive at a problem and that 
  I must not take the security of my clients&#146; professional activities lightly.<p>
  Little by little, I became successful, and the economic model that I offered 
  and used was so original that the French IT press helped to relay my programs, 
  of which were more than 400,000 samples were distributed in CD ROMs in magazines, 
  all without the aide of a press agency or any media plan. For a country like 
  France, this figure is quite significant. 
<p> But, without doubt, I was too successful: a business group had taken my trademark, 
  &#147;Cr&eacute;atique,&#148; before I had and dispossessed me of the name. 
  I renamed my business &#147;<a href="http://www.alomphega.com" target="_blank">Alomphega</a>.&#148;
<p> It was at this period, which was oriented toward very small businesses, that 
  I discovered <a href="http://www.sun.com/software/star/staroffice/index.html;$sessionid$CHRK2WAAADTR1AMTA1LU5YQ" target="_blank">StarOffice</a>, 
  when it was still in Star Division. Seduced by the program and by the alternative 
  economics which it represented for my clients, I searched for whatever resources 
  in French that would assist my clients in using StarOffice. Having established 
  that there existed nothing on the subject in French, I created, in 1998, a personal 
  site on StarOffice. 
<p> At end of 1999, Sun Microsystems France contacted me in order to entrust me 
  with presenting StarOffice to France--a move that was quite strategic for Sun. 
  This first professional contact passed very well; Sun France asked me to put 
  in place some free help forums (mailing lists) for Francophone users of StarOffice, 
  as well as some help resources online. Thus, my personal site on StarOffice 
  evolved towards what is now <a href="http://www.staroffice.online.fr." target="_blank">http://www.staroffice.online.fr.</a>
<p> Naturally, it was with much interest that I have followed the development 
  of the project OpenOffice.org.... 
<p> At the present moment, we are working with CollabNet in order to propose a 
  Francophone section to OpenOffice.org. The innovative work that we are creating 
  in this &#147;fr&#148; section will serve as a base for the creation of other, 
  native-language modules.
<p><i>And, what possibilities did you see in StarOffice (and now in <a href="//" target="_blank">OpenOffice.org</a>), 
  especially for Francophones? </i> 
<p>StarOffice represents for me the only office suite that is credible in a professional 
  context. I say it again: &#147;The only credible suite,&#148; which is to say 
  that it is much more than an alternative. Why? Simply because I am persuaded 
  that as public knowledge of IT grows, businesses will end up accepting only 
  that which is economically acceptable and pragmatically realistic.
<p>
  The OpenOffice.org project is the logical consequence of the technical and commercial 
  evolution of StarOffice, given the pragmatic context and potential of Open Source.<p>
  I see the Open Source movement versus the former means of commercializing programs 
  as analogous to democracy versus dictatorship: an irreversible progress, because 
  it represents for everyone the possibility of gains without any real losses.<p>
  I am happy to be able to participate in this international extension of OpenOffice.org, 
  for I am persuaded that one such opening will allow all to positively enrich 
  themselves. More prosaically, I am proud to be able to offer to French-speaking 
  persons the premises of an innovative tool.
<p> <i>Let's turn now to Open Source... Open Source is here, on this side of the 
  Atlantic, gaining strength daily as a business and production strategy and culture. 
  In some ways, Open Source seems characteristically American, what with the iconic 
  &quot;cowboy&quot; hacking away at making code better, faster, cheaper and then 
  sharing his work with others on the range. We know, however, that those icons 
  are not entirely true, that they are mostly myths with elements of truth. Open 
  Source developers are not &quot;cowboys.&quot; Many, in fact, are employed by 
  corporations interested in leveraging the wealth of labor and knowledge present 
  in the Open Source pool. However, the promise of freedom and community these 
  icons imply is a powerful attractor to many developers. But this raises the 
  interesting and important question, What is the culture of Open Source like 
  in France? And, what makes it appealing? Clearly, these questions are broad, 
  and you might think of answering them by answering how you came to be interested 
  in Open Source....</i>
<p>Here, in Europe, Open Source is little by little presenting itself as an incontrovertible 
  logic. Even politicians have come to register it and are favoring Open Source 
  software in their administrations. 
<p>Every day, businesses discover the economic logic of Open Source and develop 
  economic models which prove the viability of Open Source; and the public at 
  large begins to comprehend what it is all about&#133;
<p> I am persuaded that, in due time, the proprietary model of software development 
  will pass. I am equally persuaded of the great wealth--human as well as financial--which 
  is developing in Open Source.
<p> <i>Many in the community are impressed and encouraged by your so-far successful 
  efforts to create and include the <a href="http://fr.openoffice.org/" target="_blank">Francophone 
  informational section and discussion list in OpenOffice.org</a>. What do you 
  hope to accomplish by this tactic? And, can you evaluate how many people would 
  be involved?</i> 
<p>My aim is precisely to encourage people to join us&#133;. I am, frankly, a 
  &#147;win-win&#148; addict! And, of course, my aim is also to engage Open Source 
  communities. But I can&#146;t anticipate what will eventuate nor the people 
  who will be involved. I work for a near future, hoping my work will be good 
  enough.
<p> <i>The concern raised by, among others, Bill Roth, who heads Sun's OpenOffice.org 
  project, was that the French version--and any other native language version--would 
  &quot;<a href="ec27Mar.html" target="_blank">balkanize</a>&quot; 
  the project, i.e., create if not discord, a lack of communication. What strategies 
  will you employ to prevent this from occurring?</i> 
<p>The balkanization risk only exists if we fail to follow what we are doing now. 
  Look at the other great Open Source projects: they cruelly need volunteers, 
  but they can&#146;t find enough users. What we are doing now in OpenOffice.org 
  is not by any means a balkanization; rather, the contrary would seem to lead 
  to a true balkanization, in which developers end up working independently because 
  there are no tools available in Open Source projects in their native tongues. 
  In my opinion, it is not a good tactic for a world-wide Open Source project. 
  Projects like OpenOffice.org need world-wide support, and the world speaks many 
  native tongues. 
<p>
  I also think that right now it is impossible to decide on a definitive strategy 
  regarding Internationalization. I really think we have to look at what happens, 
  then make corrections as needed, always staying involved, especially now, at 
  the beginning.<p>
  We must further provide a real motivation for the webmasters [of the native 
  language sites] to be involved in the project. It is this motivation which will 
  draw volunteers. They need, that is, initiative: responsibility for their work.<p>
  Finally, if we see that I&#146;m wrong (and I don&#146;t think I am), it will 
  always be possible to stop the native language websites without causing any 
  serious damage to the central OpenOffice.org project.
<p> <i>Say that the experiment--and it is still an experiment--works. What would 
  you like to see accomplished by the &quot;lang&quot; or Native Language Development 
  Project?This experience of internationalizing the OpenOffice.org project is 
  for me an extraordinary opportunity for the global community to come together 
  in a common project and produce superior software.</i>
<p>I think that our success in articulating the efforts of an enormous body of 
  linguistically diverse developers who utilize English as the common tongue for 
  core projects will provide us with an indispensable tool, which, when brought 
  to Open Source projects throughout the world, will prove that human creativity 
  has no limits when enabled by pragmatism.</p>
<p>&nbsp;</p>
<p>Readers interested in tracing the history of the Native Language Development 
  project might wish to look at two previous articles on the subject:</p>
<p><i><a href="ec15Mar.html" target="_blank">The International, 
  I</a></i></p>
<p><a href="ec27Mar.html" target="_blank"><i>The International, 
  II</i></a></p>
<p>&nbsp;</p>
<p><a href="./editors.html">Previous Articles 
  </a></p>

</body>
</html>

