![]() |
Bram Moolenaar VIM编辑器的作者 |
Moolenaar先生,能介绍一下你自己吗?
我居住在荷兰东边,现在全职搞开源软件。我一个人生活,这样我就不必供养一个家庭。那会很难,因为我做的大部分工作没有报酬。我在家里工作,这样就避免了因为交通阻塞而浪费时间。我和外部世界的大多数沟通是通过email完成的。为了补偿自己,在假期我会到离家很远的国家旅游。我喜欢了解不同的国家及其文化。
你创造了一个VI编辑器的克隆产品。为什么你会选择VI?
最初那是个偶然的选择。因为在大学的课堂上我们被迫使用这个复杂得可怕的编辑器,却只有一页纸的文档。我开始欣赏VI是很长时间以后的事情了,那时我发现VI让我可以快速编辑文档。一旦我的手指习惯于VI,任何其它的编辑器就显得如此迟钝。因此一旦我拥有了一台amiga计算机,我必须要做一个类似VI的编辑器。那就是我决定开发VIM的原因。
VIM是你从头开发的还是派生于其它的VI克隆?
我开始于Stevie。这是Atari ST电脑上的VI克隆,后来移植到了Amiga。它仍有大量的问题,尚不能完成VI能做的任何事情,但是自从放出源代码,我可以自己修正它们。那也是我怎么开始欣赏软件开源的原因。一旦修改代码的数量超过Stevie最初代码,我就把它命名为VIM。
你是用开源协议发布VIM的,向我们描述一下该协议。为什么你不选择GPL?
VIM和其它许多开源项目的区别在于我完成大部分工作。基本上来说它是我的项目,即使许多其它人曾在工作上帮助过我。我决定什么特性能加进去什么不能。需要考虑一种符合运行该项目的协议。它允许随意部署未修改的VIM副本。修改过的代码我必须能获取到。该协议的一项重要条款是,我可以决定如何处理这些修改。这样如果经过我的允许,一些人就可以把VIM代码用到非自由、非开源的项目中。GPL协议则不允许那样做,因此从那个方面看GPL自由度小一些。理论上你可以在其它协议下使用以GPL协议发布的代码,但是你必须从所有版权人那里获得授权才行。那将非常复杂。实际上我只在很久之前申请了一次特殊授权。VIM的协议从6.1版起升级到兼容GPL。那要求可以部署用GPL协议的代码库编译的VIM副本。这也凸显GPL协议的主要缺点:它事实上是通过限制自由来实行自由的。
籍助于VIM捐助,你援助了乌干达的孩子们。你能看到自己慈善行动的明显成绩吗?
我定期拜访乌干达的孩子中心。每次去那里我都能看到进展。中心的学校在不断发展,我认识的许多孩子持续接受更多的教育。幸运的是,乌干达政局非常稳定,经济也在发展。这让该项目能够专心于改善学校和诊所。这意味着我们寄去的钱真的有助于改善条件并保持长期影响。我们现在看到,孩子完成他们的学业并返回中心工作来帮助教育更年幼的孩子。
最初的ex/vi的设计怎么可能仍如此实用?
基本想法一直是这样的,最重要的命令都是通过键盘的一些标准键来传达的,大多数是字母键。这使我们可以很快输入命令。VIM保留了VI的这一设计,但增加了许多在其它编辑器里发现的特性。这样你在两个世界里都得到了最优秀的编辑器:常用命令可以快速键入,还有一些高级特性可用。
人们通常对它既爱又恨,为什么?
在你能上手之前你要花费很长时间来学校Vi或VIm。如果你只试用十分钟就放弃它,那么你将只会记住受它折磨的痛苦时刻。当你不曾花费时间学习超越基本命令的部分的时候,你将不会获益于可能的有效编辑。但是当你的确学会使用Vim时,你能非常有效地工作,并会喜欢使用它。之后你会开始觉得其它编辑器很麻烦。比如,大多数其它编辑器不能重复一项变动。当我偶然使用word,结果我在编辑器里输入了":w"和"jjj"。
是的,比如当记笔记时这非常有帮助。当你在VIM上工作时你在用VIM吗(开玩笑)?
当然了。我用Vim来处理所有问题。大多时间使用最近版本,这样如果我犯了某个错误,我会是第一个注意到的人。
关于这个问题你透露一下:你使用什么操作系统?
我的主战场运行于freebsd4.9。它非常可靠,虽然有一些保守。我的桌面是KDE,虽然在实际工作中我大多时间运行xterms。我也有一台运行windows的机器,它用来进行Vim开发和运行一些驱动程序只兼容windows的特殊硬件。偶然我也切换到我的Amiga2000机器上,Vim开发是在那里开始的。
我们(整个编辑部门)常常使用Vim,我们认为它的开发已经结束。你认同我们的观点吗?
我也奇怪我是否应该停止加入特性并只是修改bug。所以我让赞助人投票决定是否加入某个特性。其中一项就是“停止加入特性,已经足够了”。它位于投票列表的最底端,这样就很清楚Vim用户的确希望加入新的特性。
所以你不想和Knuth先生对待他的Tex那样的激进。告诉我们有关编辑器整体设计的一些事情,你使用什么语言和技术?
我使用优秀的古老的C代码。为了和足够多的C编译器兼容,我在使用现代C编译器的某些特性方面非常保守。这大多时间只出现在GUI代码里,无论如何它还是需要一个现代C编译器。主代码甚至不使用ANSI函数原型,因为它们不兼容那些更古老的系统。使用纯C的主要优势在于它相对来说简单一些,有很多可以使用的工具。代码体积可以庞大一些,需要在释放分配内存时小心一些。但是它比C++容易得多。像Java或Python这样的语言可能更容易一些,但是他们运行起来要慢很多。
你认为Vim太艳丽了么?
在Vim里有很多途径来改变颜色。我个人更喜欢只对少数情况配色。它使快速辨认不同的文本块变得非常容易。你可以在C语法高亮里看到配色结果,这样很容易就找到注释。但并不是每块文本都高亮。运算符或函数名并不高亮。一些人写了对所有高亮每块文本的语法脚本,如果你不喜欢那样你可以修订语法脚本规则,为更多的规则选择标准文本颜色。
告诉我们一些关于最近稳定版本的新特性。
Vim6.3加入了一些新特性。我专心于修正所有报告的bug。加入了一些命令,主要为了使写脚本更为快捷。比如:keepjumps使我们可以在不影响跳转表(jumplist)的情况下在文件间跳转。一个真正的新特性是支持翻译的帮助文件。那是因为现在有意大利和法国的文档翻译。这样用户需要通过“helplang”选项来选择他们喜欢的语言。以后会陆续增加更多的文档翻译。
你的近期和长期计划是什么?
Vim7将加入许多新特性。我已经开始加入人们发送给我的补丁。现在已经支持KDE了,使用的是Qt库。已经支持在PostScript打印机打印多字节文本。我计划往Vim脚本语言中加入列表和字典,这样使编写高级脚本变得更容易些。Vim脚本语言起初非常简单,但是Vim用户用它编写了越来越多的复杂脚本。在www.vim.org上可以发现超过一千个脚本。加入两个数据类型会使脚本编写更为简单。不知何故Vim用户不喜欢使用Python和Perl接口,这样扩展Vim脚本语言是势在必行的了。
我也计划加入一些大特性。我会用投票列表来决定先加入哪个。目前位于列表顶端的是智能补全,也可以称之智能感知(intellisense)。那个实现将是个挑战,尤其假设它应该支持许多语言和所有的平台。
我也需要清理一下代码。大量东西被加入,长时间的修改,导致代码混乱和函数冗长。这不仅是为了使代码看起来好看,它也应该避免犯错误。一些部分已经变得非常复杂,要想修改而不引入新的bug非常困难。但是我很谨慎,代码清理本身也可能引入问题。为了防止这种情况,需要增加更多的测试,这也是Vim7的另一个目标。
你认为linux发展的方向正确吗?
我不认为对linux而言只存在一条路径。它可以在同一时间无错误地往许多方向发展。我的确看到了一个危机:目前的linux开发大多数是由技术人员驱动的。他们是为linux工作机制做选择的最佳人选。商业和市场人员将尝试把linux朝不同方向推动,目的只有一个:赚更多的钱。我确实希望,这将不会导致错误的选择。
你害怕软件专利权吗?你在源代码里有专利审计吗?
我意识到软件专利权的危机。幸运的是,在欧洲软件专利权仍未被承认。这意味着要想控告我个人在代码里使用有专利的概念是困难的。仍存在一个危机,公司可能停止部署Vim,因为他们需要通过我的授权。这仅是一个很小的风险,因为我没看到哪家公司因为停止部署Vim而获利。很明显,没人会向他们支付一笔协议费。我将只是删除那些侵权代码。
专利审计只能由那些管理大量钞票的专门人员来完成。为Vim不值当做那些。我不确信为了几篇代码的小软件值得那样做,因为为了发布软件那将需要好几年才能申请下来一个专利。因此甚至当审计不出任何问题,次年才出来的专利仍会导致问题。专利系统执行情况实在太恶劣了,尤其在美国。真正获利的人只有那些律师和专利局的雇员。那就是为什么他们是承认软件专利权的主要支持者。
如果软件专利权被承认了并且一些公司为“使用H,J,K,L来移动光标移动”申请了专利,你将采取什么措施?我们说的一些拥有商业化vi克隆产品的公司,他们想消灭对手。你会从vim里移除这项特性吗?
不可能为已经众所周知的方法申请专利。这被称为现有技术(prior art)。很明显像使用hjkl来移动光标这样的方法在专利申请之前就已经存在了。然而,专利局不可能知道这个,无论如何也会授权该专利。那时我将不得不为了自卫而展开一场合法的战争。我不知道我从哪里获得这笔活动资金。专利律师太昂贵了。
感谢你接受这次采访,我们希望你在个人生活和职业生涯都能取得成功。
--------------------------------------------------------------------------
原文:http://www.moolenaar.net./interv_czech_en.html
译者:http://www.yeeyan.com/space/show/joshyu