当前位置:Linux教程 - Linux业界 - 实验室中的开放源码

实验室中的开放源码

Python、Perl 和开放源码工具箱给科学带来了许多好处

Cameron Laird([email protected]
副总裁,Phaseit,Inc.
2002 年 10 月

科学和工程实验室长期以来一直依靠专用产品进行日常数据分析工作。现在,许多实验室转而使用开放源码产品和开发语言,以获得传统产品无法向他们提供的特殊技术优势。
科学家和工程师们习惯使用诸如 The MathWorks 的 MATLAB、Wolfram Research 的 Mathematica 或 SAS Institute 的 SAS/IML 之类的专用产品(请参阅参考资料以获取本文中提到的这些公司产品的链接)来收集、处理和报告研究数据。尽管从软件角度上,将这些产品集中用于一个更大的“商业智能”或“分析学”种类是很诱人的,但它们各自专注地服务于专门的科学实验室市场 — 并拥有非常高程度的客户满意度。

这些应用程序在财务上和技术上都已经取得了成功。例如,MathWorks 仍在大量雇佣程序员,而 Mathematica 在其符号计算器的每个版本中都添加大量有趣的增强功能,包括“以文档为中心的接口”及其“算法知识库”。

但是,这些应用程序遇到了新一代的竞争对手。尤其是,在许多领域中,对开放源码软件的信任正稳步提高。本文说明了为什么会发生这种情况,及其结果对您自己的工作有什么影响。本文还推断,开放源码和专用产品最终将成为队友,而不是对手。

图 1. 由用于数字计算的开放源码工具 SciLab 生成的 3-D 表面


开放源码的优势
科学家及其内部开发人员转向开放源码软件的主要原因如下:

免费许可
简易的许可证费用管理
更佳的大规模可编程性
更轻松的集成
更佳的性能
开发便利
知识产权
更佳的支持
“免费”产品有着显而易见的吸引力 — 但这种吸引力可能不象表面上看起来那样重要。相当多的用户说他们可以承受诸如 IML 和 MATLAB 之类产品的价格;这些软件工作良好,他们乐意支付许可证费用,这种费用只占软件提供的价值的很小一部分。一些用户甚至声称对软件价格不关心,因为他们将这个金额打入了研究经费。

但是,免费许可提供了灵活性。研究人员可能会访问同事的实验室并希望在主机硬件上迅速完成一个作业。当软件是基于开放源码时,只要进行下载即可。即使专用产品的文档有时也是受限的;关于 Research Systems Software 的交互式数据语言(Interactive Data Language,IDL),Anansi Spaceworks 的 CTO Terry Hancock 说:“我得到完整的 API 副本都有困难。”

但是,使用开放源码,不必安排采购订单、寻求授权,否则多少要和相关的财务上的官僚机构打交道。用户欣赏这一点。有些管理员会告诉您,他们用来配置和维护笨拙的专用许可证管理器的成本比许可证费用本身更高。

对于学生,免费软件的门槛也很适中。学生当然述说他们更愿意使用不花费自己任何费用的软件。另一方面,供应商通常对学生提供折扣,而且采购价格确实挡住了下一批预期用户的观点很难证实。

图 2. 用 Yorick 生成的机翼周围的气流图


可编程性
众所周知的是商业产品能够非常方便地进行常用数据操作,因此它们能获得成功。它们可以轻松地存储来自仪器的数据、使数据可浏览、对它排序、为它绘图以及将它包含到报表中。此类操作的准则是,易于掌握并允许忙于负责其自己的数据处理的科学家将精力集中于科学而不是计算技术。

但是,同样是这些产品,作为计算对象存在一些缺陷。它们的基础语言不能完全支持更新的、具有更强表达能力的语法(包括面向对象编程和函数型编程)。尽管这些工具适合于迅速地合作完成重要的计算,但当大型团队使用它们从事长期项目时,它们却变得很笨拙。在许多实验室中,难以实现代码重用,因此剪切和粘贴的工作量很大。

当然,团队协作始终是个挑战。开放源码能够做得更好吗?

在许多情况下,可以。例如,位于奥尔良的 Centre de Biophysique Moleculaire 的高级研究员 Konrad Hinsen 认为:MATLAB“没有超出函数级别的结构化代码(例如,没有模块),而且根本就没有可定义的数据结构。不可能构建抽象……Matlab 是 Fortran 的交互式等价物:一切都是矩阵”。

象 Python 或 Ruby 这样的开放源码开发语言,使用内置面向对象和模块封装弥补了这种数据结构方面的缺乏。

William Kleb 是美国国家航空和航天局兰利研究中心(NASA Langley Research Center)的计算方法开发领导。可重用性对他特别重要。他是一位专门研究“高热”(大于 5 马赫)飞行的航空工程师,几年前,他就开始仔细地研究使用计算机的更佳方法。Kleb 说:“我们已经厌倦了不断地剪贴代码,因为它已经变得很脆弱了。我们还开始认识到,作为团队从事单段软件开发时,我们的团队显得很笨拙。因此,我们转向了软件工程/开发社区,以寻求最佳实践。”

结果如何?Kleb 说:“现在,我们正在使用 Ruby 来创建用来支持一些我们的 XP(极端编程)实践(如自动化接受测试和单元测试)的定制工具。我们还设法为 Ruby 强大的文档编制工具 Rdoc 编写了 Fortran 95 接口,以提供自动化 API 文档编制。我们还将 Ruby 用于 Fortran 代码生成、条件编译,并将它用作将各种代码元素合并到有关各种学科的黏合剂。我们正在向着用 Ruby 封装几乎所有的 Fortran 事务的目标前进。”

这些区别很重要。即使对于并无软件背景的科学家,可编程性也很重要。每个使用工程工具箱的开发人员都会进行抽象;但唯一的问题是工具箱对这种操作的支持好到什么程度。此外,有些商业产品(包括 Mathematica)以拥有良好设计的语言而自豪。但是,总的来说,开放源码语言,包括象 Sather(请参阅参考资料)、R 和 J 这样晦涩的语言,都强调了进行长期维护和重用不可或缺的抽象表达能力。

图 3. DomainFinder 应用程序 — 一个用于确定和刻画蛋白质中的动态域的程序


在开放源码中,至少有两种显而易见的用于解决科学问题的不同途径。象 Octave 这样的项目(请参阅参考资料)打算在替代 MATLAB 时,大大减少其功能。它们的全部功能都集中于科学数据分析方面。有几种免费软件包甚至更为专业化:例如,图象压缩和分析工具(Image Reduction and Analysis Facility (IRAF))在天文学方面被广泛使用(请参阅参考资料),象人类学、高能物理和基因学这些学科也都有类似的应用程序。这些应用程序往往有宝贵的预制例程库,但正如康奈尔大学的 Joe Harrington 描述 IRAF 特征时所言,它们通常都是“糟糕的基础语言”。

其它项目开始使用通用语言,包括 Perl、Java 和 Python,并基于这些语言构建了“垂直的”工具箱。在这些项目中,SciPy 发展特别快(请参阅参考资料),其实际成功的记录在不断上升。SciPy 是一个基于 Python 的项目,它旨在再现 MATLAB 的所有功能,优化其性能并简化与其它软件的集成,同时仍保持完全免费以及至少和 MATLAB 一样易于使用。在 SciPy 兴趣小组的上届物理学会的六十名与会者中,有来自以下机构的代表:Cal Tech、国家生物医学计算资金(National Biomedical Computational Resource)、位于劳伦斯利弗莫尔(Lawrence Livermore)和别处的国家实验室、Lockheed-Martin、贝勒医科大学(Baylor College of Medicine)、太空望远镜科学研究院(Space Telescope Science Institute)以及斯坦福线性加速器中心(Stanford Linear Accelerator Center)。集成了丰富的专用模块集的完全通用的编程能力,是这些与会者希望获得的理想产品。

容易的接口
从更大的方面讲,可编程性不仅与开发相关。它也影响天平的另一端 — 应用程序中的个别语句或命令的级别。商业软件的弱点之一就是它抵制与其它系统的集成。尽管所有商业产品文档中记载有到“外来功能”的接口,包括网络数据流入、仪器设备驱动程序等,但这些接口很难使用。

相反,众所周知,开放源码语言乐于将其自身与其它部分组合到一起。程序员为诸如 Python、Tcl 和 Perl 之类的通用语言编写了数以千计的扩展。对于许多组织而言,这是至关重要的。但无论组织如何喜欢商业产品的外观或库,他们都肯定无法承担将专用外部系统结合到“与世隔绝的”软件包的高昂代价。开发人员发现用更容易集成的开放源码工具箱更好。

关于可编程性的最后一个问题是性能;许多研究人员会告诉您,当对专用软件编制完脚本时,它的执行很糟糕。尽管特定操作得到了精心的优化,但通用语言特性通常还是很慢。即使是象 Perl 这样的“胶水”或“脚本编制”语言长期以来也以速度慢而出名,最新发行版中将更强的算法表示和速度优化组合起来,产生了强大的优势。

更易于调试
迄今为止,关于开放源码的讨论还停留在开放源码软件的次要特征上。对于一些开发人员而言,开放本身是很重要的特性。Tom Silva 是从事航天飞机(Space Shuttle)和其它航天项目研究有丰富经验的顾问。他简单而又令人信服地说:“如果我有源代码,就可以找出问题。我可以添加使我的生活更轻松的特性。我可以跟踪代码以理解它实际上是如何工作的,而不是了解如何对它编制文档。”

与此相关的是:人们日渐关注依赖商业软件的科学适用性。通过使用专用库取得一定的结果意味着什么?当发现或结论依赖于一个由第三方作为商业机密来掌握其细节的黑箱时,学者该如何记载这个发现或结论呢?

当然,开放源码不受这种负担的困扰。原则上,可以精确地指定关于开放源码程序的任何事情。它不隐藏任何机密。

一些研究人员喜欢开放源码的最后一个原因是更强有力的支持。尽管商业公司雇佣了专业支持人员,但几种开放源码技术可以使用“基于社区”的在线论坛构成强有力的竞争。

结束语
Harrington“热切地期待着有一天可以扔掉我们使用的那些高价而又低能的语言”,并转向使用开放源码备选方案,并且越来越多的研究人员抱有相同态度。但还不止这些。尽管针对科学家和工程师的专用产品提供了大量价值,但它们也带来极高的代价 — 不仅包括采购价格,而且包括不灵活性、惯有的低性能和困难的开发所带来的代价。许多用户已经转向开放源码。结果是,他们立即改进了自己的工作。

在这个大趋势中,存在着几个有趣的局部变化。戏剧性事件席卷了整个生物信息市场,在那里,贴着高价标签的由风险资本提供资金的产品原本很常见,但现在构建在 Perl 上的免费软件包得到了相当程度的接受和重视,用诸如 Java、Tcl 和 Python 之类的其它语言构建的软件包也是如此,但受关注程度比用 Perl 构建的略低些。

在其它学科领域,似乎是那些将新旧技术组合起来的开发人员取得了最快的进步。Kleb 的小组在基于 Ruby 的软件包中封装了旧 Fortran。有几个组正在使用 Tcl 来改进象 MATLAB 这样的商业软件包的接口。

正在忍受不合适软件的科学和工程团队不必等待产品供应商解决其问题。许多项目正在迅速开发各种可以免费使用的解决方案。即使没有这些方案,具有复制专用价值的元素经验的开放源码开发人员也正在成倍增加。目前正在完成一些最佳的编码,将使免费软件和商业软件结合起来,以实现超出任何一方单独能力范围的成果。

参考资料

请通过单击文章顶部或底部的讨论参与本文的论坛。


请到 MathWorks 网站了解 MATLAB。


Wolfram Research 的 Mathematica 是数学家和更注重分析的科学家特别喜爱的宠儿,但对于许多主要关注报告实验室数据的生物学家和化学家来说,它有点太庞大了。


访问 SAS 网站以了解更多关于 SAS/IML(交互式矩阵库,Interactive Matrix Library)软件的信息。


在 Research Systems Software 网站上阅读关于 IDL(交互式数据语言,Interactive Data Language)的信息。


SciPy Toolkit 旨在替代 MATLAB。


具有 GPL 的 Octave 尝试提供很大程度上与 MATLAB 相同的功能。


天文学家广泛地使用 IRAF。


Sather 旨在合并 C、Eiffel、Lisp 和其它著名语言的精华。


Scilab 是免费的 MATLAB 竞争者,它使用成熟的算法来分析数据和生成可爱的图形。


分子建模工具箱(Molecular Modelling Toolkit)(MMTK)是基于 Python 的数字(Numeric)扩展。


尽管用途似乎很狭窄,但 Yorick 是一种解释型科学编程语言,它为科学家和工程师保留了快速分析和显示研究数据的简单方法。


阅读 Cameron 关于 JPL 科学家如何使用开放源码软件的文章以及严谨的开发实践,以开发真正以任务为关键的应用程序(developerWorks,2002 年 8 月)。


请参阅开放源码是如何返回教室的(developerWorks,2000 年 6 月)。


IBM 研究人员涉及多个科学和技术学科,包括化学、计算机科学、电子工程学、材料科学、数学以及物理学。请到 IBM Research 站点了解更多相关信息。


IBM Life Sciences 满足了特定于生物工艺学、医药学、基因组学、蛋白质化学和保健学的 IT 需求。


在 developerWorks Linux 专区中获取您正在寻找的 Linux 参考资料。

关于作者
Cameron 是 Phaseit, Inc. 的全职顾问。他经常就开放源码和其它技术主题撰写文章和发表讲演。您可通过 [email protected] 与 Cameron 联系。