五千年(敝帚自珍)

主题:关于Linux的推广——普通用户篇 -- 万斤

共:💬381 🌺357
全看分页树展 · 主题 跟帖
家园 关于Linux推广-开发优势篇(NTLM的故事)

我在上一篇文章中给出了一个具体的例子,说明在windows下面开发程序,从程序员角度来说,尤其是从学习角度来说。是特别得不偿失的。一个不好的比喻是,微软的开发方式好比连邪功,进展很快,后期提高很麻烦。而Linux下面做开发,刚开始进展比较慢,但是后面速度越来越快。当然Bolaohu兄给我提出了宝贵的建议和启发。

在这个帖子里面,我先给出NTLM的例子回答Bulaohu兄关于NTLM的问题,基本上都是商业上的操作讨论。技术上很少。对于商业我有一定的自信,因为我自己业余也帮家里运作一些小业务。对商业运作有一些基本的了解,加上我女朋友的课题和这方面很接近。所以我也知道一些非常粗浅的理论。

Bulaohu兄在他的bulaohu:最后一回中(千万别是最后一回啊)举了NTLM到ActiveDirectory作为例子,说明微软是从不公开走向公开,我还对此有批评是不公平的。他这个例子给的非常好,非常具有代表性。我们就看看微软这个NTLM->ActiveDirectory的转变过程是怎么一回事:

NTLM按照我非常有限地理解,它只是对应着一个用户认证协议(就是让客户机通过这个协议在服务器上面的数据库查询验证用户名称和密码),有两个版本v1和v2。微软在windows for workgroup中开始采用此协议。但是到了windows 2000的时候,忽然改用开放的Kerberos协议来取代NTLM,并且和她的LDAP服务进行整合。难道它真如Bulaohu兄所推测那样,是因为微软特别喜欢公开的协议,越来越开放所致?

很不幸,一般商业公司不会这么做,微软没事也不会这么做。我女朋友他们的商业管理教科书上写的明明白白:一个公司要采用一个新技术(比如ERP)通常最主要有三个原因,一个是它的目标客户,投资人或者监管机构要求他们这么做,第二个是其他竞争者都在使用这个技术。第三能基本替代现有的功能,而且在降低成本的情况下不增加任何明显的风险。这对程序员开发商业软件也是一样,如果你开发了一个很好的技术,向某个公司推销。除非你的新技术/软件能满足这三点,否则大部分公司是不会同意的。

所以,对于进入者来说,实际上这三个理由对新的竞争者添加了一个门槛。比如从windows转到Linux这样的情况,看看下面的这么多回帖就能看出来,1)“Linux下面能干的事情,windows下面也能干,干嘛需要转换?”“我们的客户都在用windows系统,Linux开发出来没有用”2)“其他公司都在用windows系统”3)“公司里面没有人会维护Linux,Office不兼容怎么办?风险太大了”。这三个理由在这里有明显的表现。当然,这个原理对微软也适用,如果它开发的一个技术,它的目标客户没有要求它升级,或者说,目标客户没有要求它升级的权力(不能换到别的技术)。并且投资人还乐得看到技术垄断造成利润上涨。那别说从根本上更换协议了,就是一般的升级都是不一定要做的。比如Internet Explorer就是最最明显的例子。IE6整整6年没有任何大的技术升级,甚至坚持不兼容W3C的标准。Opera对它根本不造成威胁。直到Firefox占到了16%以上的市场份额,并且越来越快为止。

这个原理当然对NTLM也是有效的,以如果微软自己开发了NTLM,而忽然放弃了去追求开放的kerberos,那肯定是1)它的目标客户要求它这么做,2)周围的竞争者在使用Kerberos/AD类似的技术,3)在此基础上,它还需要打成本牌,因为它实现的这些技术,说实话谈不上最先进的(即便当时也谈不上)。然后根据这三个理由,我自己做了一个大概的调查(因为我自己上来就是用的OpenLDAP/NFS/SSH一类的共享)对这方面了解的很少。果然,结果和理论结合的很好,在1998年win2000开发的时候,当时网络系统市场上确实有几个大头占有绝对优势,谁是微软在这方面的头号竞争对手?相信大家都能想到:Novell!

(可能还有IBM和SUN的产品,估计IBM/SUN在1998年左右的时候也应该推出了LDAP为主的相关产品,有谁熟悉麻烦给补充一下)。

想像一下,当微软用NT向它的目标客户推销的时候,和各位用window比linux一样,那些商业客户也会有疑问:我们Novell用的好好的,为何要用NT啊,自然就要拿Novell的服务和windows的比。看看当年Novell 5.x在1998年10月份推出的功能:

1)新的网络存储服务

2)Java虚拟机

3)分布式打印服务

4)Java为基础的控制台(Shell)Bulaohu兄请注意:微软现在的完全面向对象的console shell恐怕不是第一个它发明的,Novell的Java Shell才是第一个

5)目录为基础的PKIS用户认证服务(eDirectory,一个采用LDAP作为协议的目录服务).

6)目录为基础的DNS和DHCP服务,

7)集群服务,

8)一个5用户版本的Oracle 8i。

大家能清晰地看见,当年Novell Netware 5.x出来的时候,要说到性能,要谈到功能,可都要比Windows NT/2000高出来一大截子。Novel Netware 1999年左右提出的这些功能块,到现在也不能叫做过时。其中对微软最致命,最不利的的是其中的第五点和第六点,PKIS是基于公钥加密协议的,安全性要比采用Challenge方式的NTLMv2高的多,因为它不需要在网络传输具体的密码。并且也是基于目录服务(LDAP方式)的资源分配!换句话说,它可以兼容Unix的认证方式。那么微软带着NT4.x这样的服务器去找它们的时候,如果一般正在使用Novell的企业,是不会采用NT系统的。第二条理由在这里也起直接作用,对于某个大企业来说,既然其他竞争者,合作者都在用 Novell,自己采用NT当然有巨大的风险。微软唯一的优势是免费牌,所以NT一开始打的是小企业牌,瞄准的是预算紧张的中小型企业和工作组,走农村包围城市道路。后来显然成功了。

而且NTLM还有一个噩梦般的问题:就是微软不想公开,不想升级NTLM这个协议也不行。像其其它大部分程序一样,这个协议被SAMBA TEAM采用逆向工程公布了大部分的程序调用。并且SAMBA小组发现此协议的弱点,甚至能够比较两个版本的不同。而且既然SAMBA小组可以公开这个发现,不难想象肯定还有一些安全机构早就秘密地利用这些弱点,所以在这种情况下,微软NTLM完全成了防君子不防小人的工具:它真正想防备的人可以轻松利用弱点穿过,而广大程序员,如果它不想去采用特殊手段了解的话,只能眼睁睁看着这个问题发生没有解决方法!因为协议是不公开的。对于大公司客户来说,这个一定是首要考虑的问题。SAMBA的工作如此有成效,以至于后来微软被迫公布了NTLM的文档。

这两个问题加在一起,肯定造成严重的后果,1)隐藏的客户认证方式得不到第三方企业的支持。认证问题在网络系统里面是核心问题,因为除了开机需要认证,很多应用程序都需要用户认证信息,比如我用的emacs就需要。如果认证完全是不公开的,其他开发商很难开发网络应用程序,而被迫采用SAMBA的逆向工程方式。而且如果微软采用不透明的方式,那么这些第三方企业还需要花大量的成本来做转换工作,那它们谁都不会去投靠windows。2)时间上也不允许微软再去开发一个全新的认证协议,安全认证协议不是普通程序,牵涉的方方面面相当多,需要很长时间的开发,而且通常技术只掌握很少的特殊机能的人手上。而且对客户而言,当然公开的协议要安全的多。这两点就足够说明它只能选择一个公开的加密协议以及相关的API库来快速实现类似的功能以加强它的实力,赶上Novell。同时,它还需要开发一个LDAP程序接口,实现Netware 5.x下面的基本功能。先保证服务器能够在基本功能上和Netware 5.x持平,并且有保留地实现某些公开的标准,吸引第三方开发商转换windows平台的时候降低成本。先用低成本冲击掐死直接对手。然后拓展此标准作为私有标准拓展,并且用这些私有标准来阻挡其他竞争者进入。

这个策略就是著名的微软3E策略——包围 embrace,拓展 extend,毁灭extinguish/exterminate)当然微软自己不是这么说的,叫做 拥抱,拓展,和发明Innovate。最后的结果大家都能看见了,Novell在没有走Linux道路以前一直被压的翻不了身。这个策略别说以前,到现在还在用——IE8又不按照标准的W3C标准来。而是自己搞了一套拓展模式。所以Bulaohu兄说微软越来越开放,那是有根本原因的。我做了一个小小的调查,大部分微软的开放行为,都是有商业驱动的因素。绝对不会是忽发善心,在没有竞争者基础下主动善待用户和下游开发员。

这个历史也生动地说明了为何以微软为主开发程序是危险的,微软不是Novell,不会在自己的核心软件里面完全加入像Java这样第三方的核心支持。以前很多传统的计算公司,对其他伙伴还算是相当友善的,至少不会像微软那样试图大小通吃。它每次和其他公司打架,下面的开发商就要遭殃——因为你需要按照新的结构再来一次,而这个新的结构居然依赖于它的竞争对手!结合上一篇的例子,我们得出一个结论:

在微软模式下开发的程序极大依赖于微软的对手采用什么技术,什么时候,以什么方式出现。如果它对手实现了当前的功能,而你做的程序正好是在windows下面实现对手类似的功能,那这个程序基本上会被判死刑,连做服务的机会都很小了。

这样的方式开发程序,其实很危险:一个好一点的中型程序,通常需要至少2-3年的开发期才能基本好用。如果采用微软的方式,期间很有可能系统被强迫升级了。而程序本身的架构要是有很多建立在它的系统上面,就要全部重来。中国一直缺乏高质量的程序员,对微软依赖太大我认为也是一个重要原因。

而在Linux世界里面,就不是完全这么回事,经常有小公司的软件打败大公司软件的情况,比如文件系统就是这样,IBM自己在Linux下面移植了一个JFS文件系统(此JFS不是基于AIX上面用的系统,而是基于OS/2的),就是因为性能不突出,结果反而ReiserFS这样的个人为主的文件系统一度占了上风,(这个人杀死自己的老婆去蹲监狱了,好像他准备卖掉所有的相关产权来挣律师费)。类似的例子还有LVM,甚至就算是Novell也不行,它购买了XGL Server的程序,雇佣了相关的所有开发人员,然后把开发封闭起来不接受外界补丁。结果就是Redhat开发了AIGLX拓展。微软的方式,在公开标准占上风的Linux下面,很难予以竞争,比如微软就很难说服我换到它们的系统。除非上面的三个理由中的前两个某个生效了。(我反复提到上面的三个转换理由,是有大量的研究做基础的,这里也是主要给广大程序员开发商业软件提个醒。)

我认为目前最佳的开发方式(至少我会这么做)就是以Linux为主,尽量独立地开发自己的功能块,如果有LGPL的库可以拿来用。尽量不要考虑商业软件对象的重用问题,那样并不可靠,还不如自己写一份来的省事。然后再考虑windows平台接口。实际上,目前真正需要服务的系统大概就三类:1)windows2)POSIX/X,3)JAVA,移植本身并不是特别严重的问题。Linux下面开发,从长远来说,确实是最值得投资的行为,至于那些工具某个特殊的功能,那是个人爱好问题。

最后,根据我的经验,一旦某个程序员下决心从windows转到Linux平台下,并且真正按照Linux为主的方式来进行管理和开发,很少有人(至少我没有遇到)再愿意回到微软系统下了。

元宝推荐:铁手, 通宝推:铁手,

本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河