📄 6.html
字号:
Emacs、Python和Qt项目有一套对付这个问题的好办法,就是让目录名中包含版本号。这里有Qt库安装后的目录结构的例子(${ver}是代表版本号的变量):<p>/usr/lib/qt<br>/usr/lib/qt-${ver}<br>/usr/lib/qt-${ver}/bin # moc程序所在目录<br>/usr/lib/qt-${ver}/lib # .so共享库所在目录<br>/usr/lib/qt-${ver}/include # 头文件所在目录<p><br>这样组织目录结构可以让多个不同版本的档案共存。客户程序可以根据需要选用具有特定版本号的库,因此为了不让这些接口影响客户程序,还是需要付出一些小小代价(制定版本号)的。<p>提供RPM包<br>安装可执行文件包(二进制包)的事实标准就是使用RedHat包管理器将可执行文件打包成 rpm 包。许多流行的GNU/Linux发行版都是这么做的,同时也有许多发行版虽然主要不是rpm包格式但是也支持rpm包(除了Debian和 Slackware以外,而且Debian还支持rpm的安装)。<p><br>因此一个好的项目除了有tar包的源代码以外,最好也提供直接可安装的rpm 包的下载。<p>如果您能把您的源代码tar包和Makefile文件中用于生成rpm包的相关信息写入rpm的spec文件中就再好不过了。spec文件是有着".spec"后缀的文件,这就是带 -t 选项的 rpm 命令如何在 tar 包中寻找它的方法。<p>还有一个要点是,您可以用一个脚本程序自动的从Makefile或version.h 文件中找出版本号,并用这个版本号来生成您的spec文件。<p>注:如果您还打算提供源码的rpm包,最好用BuildRoot工具来将程序编译到/tmp或者/var/tmp目录中。如果不这么做,在安装过程中执行 make install命令时就会直接将那些源程序直接安装到最终的目录位置下。这样就会导致即使在发生文件覆盖冲突,或者您本意并不想装那个包的时候,安装动作依然被执行。因此安装完成后,文件是被装到了系统中,但是系统的RPM数据库却并没有记录这些信息。这种愚蠢的SRPM安装动作是非常危险的,理应避免。<p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I646" ID="I646"></A><center><b><font size=+2>好的文档编写惯例</font></b></center><br>6.好的文档编写惯例<p>最重要的文档编写惯例就是多写一些!很多程序员都轻视这些事情。但是下面两个理由可以让您明白您必须去做文档工作:<p>文档可以指导您的实践。 写文档的最佳时机是在您一行代码还没有编写时就应该开始,此时您需要想想您打算做点什么。您会发现用自然语言思考程序应该完成什么功能可以促使您从更高的层次考虑软件是什么样以及她该如何工作。这种思考可以节省许多以后的时间。<p>文档是代码的招牌。 许多程序员为他们的程序只提供了少的可怜、内容匮乏、语言差劲的蹩脚文档,这实际上等于向其他人展示说,写这个文档的程序员对潜在用户的需求也同样会粗心大意、马马虎虎。相反,好的文档则会向其他人传达出文档背后的程序员是非常聪明、专业的人。如果有一些类似的项目正在与您的竞争,一定要写出好的文档来,至少不能让潜在用户瞥了两眼您的文档后就立即否定您的项目。<p>这份文档虽然着眼于文档编写实践,但并不是一份专门介绍如何写出好文档的详细讲义。因此下面我们将重点介绍文档格式和编写工具的选取。<p>虽然开源社区长期的传统就是拥有强大的文档格式化工具,但是为数众多的文档格式仍然使得整个系统的文档支离破碎,很难用一种统一的方法全局检索和阅读文档。下面我们将先介绍各种流行的文档格式的用途以及他们的优劣,然后再给出一些编写好文档的建议。<p>现行的一些好的做法<br>这里将列出一些在开源软件开发群体中流行的一些文档格式。当我们文中提到“展示”标记,就是指那些控制文档显示的标记(如字体)。当我们提到“结构”标记,就是指那些描述文档结构的标记(如段落、强调标记)。当我们提到“索引化”,则是指从众多文档中萃取出可检索的关键字集合的过程,“索引化”可以帮助用户在整个文档中可靠的找出自己感兴趣的资料。<p><br>man手册页<br>这是最普通的文档格式,来源于UNIX系统,是一种原始的“展示”标记格式。 man(1)命令提供了页显示和原始的搜索手段。这种格式不支持图象、超链接和“索引化”功能。不过这种格式转化成Postscript进行打印的效果还不错,就是转成HTML格式不太方便(主要是纯文本)。man 的相关工具在各个Linux 系统中几乎都有。<p>手册页格式做为命令用法解释或者短小的参考文档还是不错的,对一个有经验的用户这样做可以非常节省内存。那些有着复杂用户界面和很多选项的程序会让系统负载非常重,如果交叉链接太多的文档甚至会让整个系统不堪重负。(Man手册格式不支持超文本链接)。<p>HTML文档<br>自从1993-1994年互联网流行起来后,HTML标记格式开始流行,这种标记格式有一定的结构,也便于“展示”,还可通过网络浏览器浏览,对图象和超级链接也有支持。不过自带的“索引化”功能很有限,因此搜索引擎技术得到了大力的发展。这种格式也可以很好的被打印出来,相关的制作工具数不胜数。<p>HTML标记语言非常灵活,非常适用于各种文档。实际上她太灵活了,甚至可以展示Man手册页格式的信息。不过问题在于她很难自动检索,因为这种格式中太多的标记被用于描述“展示”信息,而鲜有标记描述文档的结构。<p>Texinfo文档<br>Texinfo格式是自由软件基金会推荐使用的格式。她是在强大的Tex格式引擎上建立的一套宏。拥有许多结构信息和部分表示信息。可以用Emacs浏览,或者用专门的info程序阅读。这个格式支持超级链接,但是不支持图象﹔无论是打印出来还是在线阅读都可以很好的“索引化”﹔如果您装了某个 Texinfo格式的文档,该文档的信息就被整合到系统的全局目录表中。这种格式还可以很好的被转换为Postscript格式和HTML格式,相关工具在大多数 Linux系统中都是预先安装好的,当然您也可以从自由软件基金会的网站上下载(http://www.gnu.org)。<p>Texinfo有着很好的设计,非常适合于完全字符编排的书籍和小的在线文档,但是和HTML格式一样,她也是一种两栖格式──既有表示“结构”的标记,又有表示“展示”的标记,“展示”标记给文档进一步处理带来了一些麻烦。<p>DocBook格式<br>DocBook是一种强大且精巧的基于SGML(当前XML的前身)的标记格式。和前面几种文档结构不同,这个标记格式只包含“结构”信息,而没有“展示”信息。她可以很好的支持图片和超级链接﹔支持“索引化”﹔很易于转换成HTML格式和便于打印的Postscript格式(而且随着工具功能的增强,打印效果还可进一步提高)。该格式的文档和相关工具可以从DocBook的网站(http://www.docbook.org)下载。<p>DocBook在处理大而复杂的文档中表现出众﹔她被特意设计成可以支持各种技术文档并可以将他们用不同的输出格式“展示”出来。不过她的回溯功能非常复杂,工具也没有完全发展成熟(虽然进步很快),入门级的文档非常少而且常常写得很混乱。<p>也许未来会有些更好的做法<br>2000年7月,世界一些重要的开放源码项目开发组(包括GNOME、KDE、自由软件基金会、Linux文档项目组、开源首创)在加州Monterey举行了高级首脑会议。该次会议的重要议题就是试图建立一套共同的工作惯例和共同的文档交流格式,以便为自由软件制作出更丰富、更统一的文档资源。<p>具体的来说,会议的目标就是要制定一种文档包的标准,使得当某文档被装入系统中后,文档包就立即被集成到整个系统的搜索数据库中,系统可以通过某种一致的手段查找、搜索各种文档。实际上GNOME和KDE组已经开始在朝这个方向努力了,大家都明白这并非是一种标记语言就可以解决的问题,而需要建立一套结构化的系统体系。<p>会议签署了一个意向文件,清晰的指出一些关键的开源项目正在着手或者已经采纳使用Docbook格式做为项目文档的首选格式。<p>与会者最后也决定了采用“Dublin core”元数据格式(一种根据库管理程序开发的与数字资料索引有关地国际标准)做为文档搜索的标准,这个标准的细节正在制定中,因此最终DocBook标记中会添加一些信息用于支持嵌入DocBook文档的Dublin Core元数据。<p>目标是明确的,基于索引标记和Dublin core元数据可以提高DocBook文档的自动搜索能力,从而使得DocBook的用途如虎添翼。虽然还有一些工作尚未完成,但是它们将会被不断填充进整个体系中。老的基于描述的标记语言文档所剩下的日子已经不多了。(本文档在2000年8月已经有了DocBook格式的版本。)<p>因此新的开源项目应该注意这种动向,如果现在就采用DocBook格式的文档编写,这可以帮助他们省去以后将文档格式转档的麻烦。<p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I647" ID="I647"></A><center><b><font size=+2>好的沟通方式</font></b></center><br>7.好的沟通方式<p>如果除了您自己之外没有人知道您辛苦开发出来的程序,那么您的程序就不会对这个世界带来太大的用处。因此,在互联网上充分的展示您的项目可以帮助您获得用户的支持,还可以找到志同道合的开发人员的参与。下面是一些常用的与其他人沟通的做法。<p>在c.o.l.a和Freshmeat上公布<br>在comp.os.linux.announce 新闻组对您的项目发布公告。这个新闻组除了有大量的阅读群外,她也是许多其它站点,比如Freshmeat,公布新消息的地方。<p>在相关主题新闻组中公布<br>在USENET中找到一个与您项目密切相关的讨论组,并在那里发布您的项目也是一个极好的方式。需要注意的是只能在与您项目相关的地方公布,并且不要灌水。<p>比如,当您用Perl写了一个查询IMAP服务器的程序,您可以在comp.mail.imap 新闻组公布。但如果这个程序并非是一个反映Perl最新技术的例子的话,就没有必要把这个消息公布在comp.lang.perl新闻组上了。<p>另外,您的帖子中应该包含您的项目网站所在的URL地址。<p>建一个与项目相关的网站<br>如果您想围绕项目建立一个用户、开发者的网上社区的话,最好应该建一个网站。一个标准的项目网站一般包括如下内容:<p><br>项目的特点(为何要有这个项目,谁会对此项目感兴趣)。<p>下载项目源代码的地方。<p>指明如何加入项目相关的邮件列表。<p>一个常见问题解答列表。<p>HTML格式的项目文档。<p>与项目相关或竞争的其他项目或网站的链接。<p>有的项目站点甚至还有指向源码结构树的匿名访问链接(便于跟踪项目进展)。<p>维护一个项目相关邮件列表<br>维护一个项目开发专用的邮件列表几乎是必须的,透过这个邮件列表项目的合作开发者可以互相交流并讨论对程序补丁的建议。您最好再建立一个让其他人及时获知项目进展状况的公告邮件列表。<p>比如您的项目名称为“foo”,那么开发邮件列表就可以命名为 foo-dev 或者 foo-friends,公告邮件列表就可以命名为 foo-announce。<p>在各大主要项目库站点中发布<br>在过去的几年中,Metalab集中营(http://www.metalab.unc.edu/pub/Linux)成为了Linux各种软件集散的最重要的站点。<p>自1999年秋建立以来,SourceForge 也获得了爆炸性的发展。这个站点并非只是一个简单的资料与发行版的汇集之处,虽然很多人都认为就是那样。这个站点更是一个为自由软件项目提供一整套开发环境的虚拟主机,包括针对项目提供硬盘空间、网络访问服务、邮件列表服务、错误跟踪、聊天室、CVS管理等各种服务。<p>还有其他一些重要的网站是:<p>Python站点(http://www.python.org) (针对所有用Python写的程序)。<p>CPAN(http://www.perl.com/),综合Perl资料网。(针对所有用Perl写的程序)。<p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I648" ID="I648"></A><center><b><font size=+2>好的项目管理经验</font></b></center><br>8.好的项目管理经验<p>由于参与者都是志愿加入某一项目的,因此要想组织好一个自由软件项目的实施必然面临许多独特的挑战。这是一个非常大的话题,在这份HOWTO文档里还难以说清。幸运的是,许多有价值的论述已经指出了这其中的关键问题,相信他们会给您带来帮助。<p>关于基本开发模式的讨论和对“早发布常发布”的集市开发模式的论述请参考《大教堂和集市》一文。<p>关于心理动机、社群习俗和化解各种冲突的讨论请参阅《开拓智域》一文。<p>关于开源软件经济学基础和各种商业运作模式的讨论请阅读 《魔法大锅炉》一文。<p>需要指出的是这些文章并非自由软件开发的终极论断,不过他们都是经过深思熟虑后的思想结晶,还没有其他文章超越了他们的深度(文章的作者非常希望未来某一天有人超越他们)。<p><p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I649" ID="I649"></A><center><b><font size=+2>自由项目实施</font></b></center><br>×××××××××××××××××××××××××××××××××××××××××××<br>作者:王乐珩<br>欢迎访问joyfire.net<br>×××××××××××××××××××××××××××××××××××××××××××<p> 这篇文章分析自由软件项目的常用实施工具和方法流程,以及已有的成熟建议,但不是从技术角度介绍软件使用方法(读者可以在“joyfire linux笔记”的其他部分或者joyfire.net找到有关技术的资料)。本文要讨论的更接近法律、文化以及社团传统。我不会探讨常见的自由软件理念和纯粹的哲学问题,这方面已有很多经典作品,例如Eric S. Raymond的五部曲。<br> 这篇文章是提供一些自由软件项目实施的经验和建议,合适的读者应该是已经对自由软件熟悉并感兴趣,认同自由软件理念,希望在这中间做点什么的人。换句话说,不是“Why”和“What”,而是“HOW”。<br> 在航行之前要考虑清楚自己的目标和能力,做好充分的准备,然后,就是勇气和耐心了。Lucky!<p><center><A HREF="#Content">[目录]</A></center><hr><br><A NAME="I650" ID="I650"></A><center><b><font size=+2>GNU</font></b></center><br> 在最初,你需要谨慎地考虑和选择。对自己的项目和打算作出规划。然后进一步了解法律和文化细节,看看别的项目是怎么做的,确保自己的项目有一个坚实的基础。<p>1.平台<p> GNU首先是指GNU项目的各种软件,以及由它们组成的软件环境或者平台,例如linux、bash、gcc等等。<p> 显然,如果新的自由软件可以建立在以前的自由软件的基础上,或者和众多其他自由软件相互支持,那么无疑会增加成功的机会。同时相似的自由软件的环境也有利于宣传和改进。当然,没有必要一定采用哪种环境,但是因为很多系统基本工具本身就不是开源的(open source),所以会出现问题。例如Windows平台下的很多编译工具,API和COM控件,也许是免费的,但是它是专有的,不允许自由修改和二次发布。<p> 举个例子,Win32 API是Windows平台下最基本的API,在一般情况下,它的确是可以无条件使用的。如果你的程序仅仅是应用(Application),那么没有问题,你使用的仅仅是Win32 API的“界面”。但是如果你的程序是一个编译器或者类似的东西,你就必须得到微软的许可,因为严格讲,你已经把Win32重新包装发布了。由于这样的原因,VC的竞争对手,例如著名的编程工具Delphi,要把Win32 API包装到自己的类库,就得支付使用费用,而且无法调用很多Windows操作系统默认的对话框(例如“打开对话框”“存储对话框”“查询对话框”),必须在类库里重新实现一遍,这就是Delphi生成的可执行程序比同类VC的要稍微大几十K的原因。这是微不足道的损失,但是这种专有形式的阻碍可能会对你的软件性能产生障碍。<p> 当然,在MS Windows和其他非自由的平台下同样拥有很多优秀的自由软件。只是这需要你更加小心,避免在技术上或者法律上进入尴尬境地。<p>2.GPL协议<p> GNU重要的核心就是GPL协议,它是自由软件的法律基础。接受这个惯例,是标明自己open source的立场的最直接方法。这份文件的作者已经为自由软件体系建立了一套完备逻辑的法律体系,可以使一个自由软件在保证自己“free”(注意,这个词是双关的,即表示自由,又表示免费)的初衷不会被其他人因为私人利益而改变,又可以保护大多数的用户可以不受限制的充分使用,甚至可以通过保护一种游戏规则保护以发布自由软件赚钱的软件商的利益。<p> 这个协议形成的版权系统(copyleft)和普通的私有软件版权协议(copyright)是完全不同的,如果你一但在前人的基础上开发,就必须公开源代码,否则你就失去了使用前人代码的资格,这是递归的过程.至于对程序收费,GPL没有禁止,但是公开代码本身就决定发布者不能把价格定的太高(你的竞争对手可以重新编译你发布的源代码然后比你更低价出售,只要它对自己的修改公开源代码,就不违法)。<p> 现存的linux或者自由软件商业模式都是建立在提供服务上的,也就是替企业制作特别的解决方案,或者为硬件厂商开发特殊的版本。例如为手持设备厂家开发嵌入系统,为工业控制设计工控系统,或者为企业提供咨询服务。这种工作的客户就要求源代码的控制权。MS也对自己的大的特殊客户提供有限的共享代码服务。但是他们的软件对企业级用户限制太多了。<p> 自由软件是一种信仰,更是一种商业潮流,是利益而不是其他使IBM等企业强力支持Linux,因为他们本来就不是靠release赚钱,他们的核心都是对用户的服务。建议阅读Eric S. Raymond五部曲最后的The Magic Cauldron,生动描述了这种商业模式怎样占领几十亿美元的IT市场的。<p> 要说明两点。首先,不只GPL一种自由软件发布协议,很多著名的自由软件,例如Apache、X系统等,都采用自己的独特的自由软件发布协议,当然具体条款的约束是不同的,例如X就很松(允许使用者修改源代码但是不公布,把这变成自己的私有财产),而Apache就比较民主(它的社团通过投票决定下一版本的工作)。其次,不要把自由软件和盗版联系起来,自由软件和私有软件仅仅是两种不同法律体系、世界观和商业模式,Gates和Linus都是值得尊敬的知识英雄(当然,你可以对某人有自己的看法,实际上我也有,但不管怎么说,他的成功不该被贬低,尤其是很多非议夹杂着个人潜意识里的嫉妒)。而盗版,就是剽窃。不管无知之辈如何把盗版和Free相提并论(一般还会加上对MS的种种攻击),盗版不符合Free精神,就好象把偷窃和共产主义并列一样滑稽。<p><p><br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -