主题:【原创】关于麒麟操作系统内核,还想说两句 -- 闲云野熊
功能相似,不一定要求代码一样.
邓小平说,白猫黑猫,过得河就是好猫.
只要实现功能就可以了,要追求代码相似实在是太太太难了.
不知道你编过程序没有,有没有看过很多代码.
有时候我看人家的代码,真是感慨,原来代码是可以这样写的(好坏都这样说,呵呵).
但是拿着国家几百万上千万的科研经费去抄FreeBSD,完了还声称是“完全自主开发”就是不对的乐。
也许你可以写出各种千奇百怪的代码,但正确的实现功能并且高性能的代码设计思路还是很有限的。
再说我一直说得很清楚,我没有说麒麟没有抄袭freeBSD,只是说证据不足。那位澳大利亚读书的人搞的评测方法我认为是有问题的。上面我用同样的比较方法比较了两段文字,虽然是游戏之作,但我认为还是可以说明问题的,据我所知,麒麟团队邀请了这位作者去交流,说可以参观源代码。这起码反映了一种态度。
我的意见是比较源代码才能有效确认麒麟是否自主开发功能多少,如果通过比较二进制代码的方式,这种比较起码要(1)比较两种以上功能用途相似,级别相当,但被确认各自具备独立知识产权的操作系统,比较结果其相似度低于一定标准;(2)至少两次以上分别比较两种相同渊源的操作系统,其相似度达到同样的标准。如果有一种比较方法能够达到以上要求,在比较麒麟和其他操作系统的相似性我认为才有说服力。
先贴一个链接:麒麟官方承认非独立研发 采用FreeBSD代码 http://tech.china.com/zh_cn/news/company/892/20060518/13328759.html
熊兄的回复里面第一段是故意为之,您也可以全部引用,最后加一句“都是狗P”,效果是一样的:-)。但是你混淆了一个概念,我们是说麒麟抄袭,而并不在于运行结果。换到这里,就是说您的第一段里面包含了多少我的文字,而不是说你我要表达的意思是否一样。如果你全部或者大部分引用了我的文字,而我的文字是有版权的话(这里我声明放弃这段文字的版权:),您的行为就构成抄袭了,而不在于您最后的意思和我是否一样,您的意思和我不一样并不能否认抄袭的事实。
我原先那句话的意思是,如果是独立开发,即使完成同样的功能,其中代码相似的可能性也是很低的。
Freebsd和linux都是open source的项目,这两者之间源代码的差别是多少呢?以下是我的小实验:
先说工具,comparator是ESR在SCO提出linux里面包含SCO copyright的源代码之后写的一个代码段相似度比较的工具。网站在这里http://catb.org/esr/comparator/,遗憾的是我从国内连不上,还好,我在这里http://www.ibiblio.org/pub/Linux/utils/text/comparator-2.5.tar.gz找到了。
FROM MAN PAGE
LIMITATIONS
comparator does not attempt to do semantic analysis and catch relatively trivial changes like renaming of variables, etc.
This is because comparator is designed not as a tool to detect plagiarism of ideas (the subject of patent law), but as a
tool to detect copying of the expression of ideas (the subject of copyright law). Normalizing the code in excessively
clever ways would trespass into the territory of ideas and tend to produce false positives.
The heuristic for eligible files can be fooled, though this is unlikely.
还有其它的,就不摘抄了,反正大家都可以去下载来看
手边有freebsd 4.4的内核源代码,(平时主要是用linux),4.4有点老了,因此我选了linux-2.4.31作为对照方。
#comparator-2.5/comparator -N line-oriented,remove-whitespace,remove-braces freebsd-4.4 linux-2.4.31
这个比较使用了缺省的设置,shred=3,也就是说3行连续的代码相同即视为matched。在大多数情况下,这个shred的设置属于paranoid型。
输出很长,就不全部贴上来了,看个开头吧
#SCF-B 2.0
Filtering: language
Hash-Method: RXOR
Matches: 6476
Merge-Program: comparator 2.5
Normalization: line-oriented, remove-whitespace, remove-braces
Shred-Size: 3
%%
linux-2.4.31: matches=6476, matchlines=122875, totallines=5551411
freebsd-4.4: matches=6476, matchlines=183934, totallines=1587601
%%
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:564:566:753
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:565:567:753
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:566:568:753
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:567:569:753
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:568:570:753
freebsd-4.4/alpha/alpha/alpha-gdbstub.c:569:571:753
linux-2.4.31/arch/sparc64/solaris/signal.c:51:53:425
%%
这个是第一段match的结果,那么我们看看linux-2.4.31/arch/sparc64/solaris/signal.c里面的这一段到底是什么?
41 long solaris_to_linux_signals[] = {
42 0,
43 SIGHUP, SIGINT, SIGQUIT, SIGILL,
44 SIGTRAP, SIGIOT, SIGEMT, SIGFPE,
45 SIGKILL, SIGBUS, SIGSEGV, SIGSYS,
46 SIGPIPE, SIGALRM, SIGTERM, SIGUSR1,
47 SIGUSR2, SIGCHLD, -1, SIGWINCH,
48 SIGURG, SIGPOLL, SIGSTOP, SIGTSTP,
49 SIGCONT, SIGTTIN, SIGTTOU, SIGVTALRM,
50 SIGPROF, SIGXCPU, SIGXFSZ, -1,
51 -1, -1, -1, -1,
52 -1, -1, -1, -1,
53 -1, -1, -1, -1,
54 };
请注意51-53行。
那么freebsd-4.4/alpha/alpha/alpha-gdbstub.c里面这段match的代码是什么?
553 static int gdb2tf[NUM_REGS] = {
554 /* integer registers */
555 FRAME_V0, FRAME_T0, FRAME_T1, FRAME_T2,
556 FRAME_T3, FRAME_T4, FRAME_T5, FRAME_T6,
557 FRAME_T7, FRAME_S0, FRAME_S1, FRAME_S2,
558 FRAME_S3, FRAME_S4, FRAME_S5, FRAME_S6,
559 FRAME_A0, FRAME_A1, FRAME_A2, FRAME_A3,
560 FRAME_A4, FRAME_A5, FRAME_T8, FRAME_T9,
561 FRAME_T10, FRAME_T11, FRAME_RA, FRAME_T12,
562 FRAME_AT, FRAME_GP, FRAME_SP, -1,
563 /* float registers */
564 -1, -1, -1, -1,
565 -1, -1, -1, -1,
566 -1, -1, -1, -1,
567 -1, -1, -1, -1,
568 -1, -1, -1, -1,
569 -1, -1, -1, -1,
570 -1, -1, -1, -1,
571 -1, -1, -1, -1,
572 /* misc registers */
573 FRAME_PC, -1,
574 };
575
显然这两者功能完全不一样,所谓match也不过是语法上的相同,完全不能说是freebsd里面有linux的代码,或者linux里面有freebsd的代码。comparator的报告我碍于手上的工作,没有仔细去对比,方法都在上面,如果有兴趣大家可以自己试试,看看到底哪些地方的代码是×有意义×的相似。
首先,关于这段文字,我的看法是由于我们关注的领域相同,所以在牵涉到对同一领域的事物的描述肯定有相同的词汇。但是我使用这些词汇的次序、语境与您的的大不相同。所以您不能通过对我使用的词汇与您使用的词汇断定我是抄袭您的文章,即便您不放弃您的版权,也不可能从法律上和实际意义上告我侵权。
麒麟操作系统开发组承认在系统服务层引用、改造了freeBSD5.3的代码,与您引用的文章中声称麒麟不是独立研发的,完全是从freeBSD5.3改造的含义完全不同。
我一直强调,目前无法证实麒麟的整个开发都是盗版行为。如果要想证明这一点,目前看来只有通过完整的比较源码才有效。
仅仅依靠对二进制代码进行对比是远远不能说明问题的。根本在于比较的方式,你可以看到这篇比较作者的原文,在不同的比较方式下麒麟与freeBSD5.3的相似度可以在12%到61%之间,如果加上作者的推论,还可能达到90%以上,跨度这么大,你如何断定比较的有效性?如果仅从二进制代码对比,我是否可以因为大家都是01串的不同排列而认为从代码片断“0”和“1”的引用情况断定其相似度为100%?任何软件对比都是这个结果。这有没有意义?
该文作者自己承认,在使用同样的方法对比两种明确有血缘关系的windows时得出的相似性是很弱的。我认为这充分说明了这种方法的局限性,我个人对使用这种方法得出的结论是持保留态度的。
顺便说一下,看到麒麟网站上介绍,麒麟的开发组是邀请这位质疑人士访问长沙的,并许诺可以看源代码,看项目组工作,但被这位作者婉拒。
1) 没有人说麒麟是整体盗版,我只是认为麒麟应该诚实。做了多少工作就是多少,没必要胡吹(当然为了骗国家的银子除外),有多少所谓的863项目在闷声大发财(兄弟我也曾经担任过一个863计算机软件项目子课题的负责人,算是知道咋回事),麒麟偏偏既得利,还想得名,既做了那什么还想立那什么,跳出来自然要被大家扁。章博士也没有因为做了LVS就号称开发了“自主知识产权”的服务器系统内核,反过来说,LVS如果不是借助了open source社区的力量,今天也不会有这么大的发展和影响力。
2) dancefire的比较不是binary比较,而是反汇编后的asm代码比较,谈不上01串,毕竟是有上下文的。
3) 如果麒麟项目组愿意使用comparator比较一下源代码,把结果公布出来,也还可以当个盾牌。这是正确的回应的办法,linux就是这么回应SCO的。如果不造假,这也很方便,不费项目组什么力气,不暴露任何“保密”内容,也很有说服力;当然麒麟也可以造假(但是以我的恶毒心理,这玩意要造假也够累的,要无中生有很多文件名,文件名还不能瞎编,结果不能随便写,要造假就累S丫的:-)。捂住盖子造假容易,但是一旦掀开盖子,哪怕是很小的一点缝,造假的成本就会成倍上升了。
4)
麒麟没有说明所谓的“基本内核层”完成了哪些功能,而“系统服务层”又干了些啥。回答这段话我还是直接引用dancefire的原文吧。
5)
坦率的说,麒麟项目组这么做真是傻:如果麒麟真的是“国防科研项目“,国防科研项目的保密要求是什么?凭什么一个在澳大利亚的中国人可以去看源代码?这样的行为是否直接违反了保密要求,允许dancefire去看而不让我看到的依据又是什么?如果不是”国防科研项目“,为什么又总用这个遮羞布遮着。
并且为自己的结论辩护。声音如果足够大,上达天听,直到影响到政府介入进行调查,给个它自己的结论,供大家评判。舆论不就是这么影响决策者的吗?投票,听证会都是表达个人意愿的机会,只是俺们没有这样的机会,只好在网上发发牢骚。
我对政府没什么乐观的,陈进现在依然逍遥,天天开着宝马到交大继续上班。
过去科研投入得太少了,人才流失非常严重。现在加大了投入,虽然的确出现了很多不正常的现象,不过学会花钱本来就是需要一个过程的。而且现在的社会环境如此,不可能科研人员中不出现一些败类,不能一杆子打掉一船人。
强调实时性可能是为了应用到一些军事设备的控制系统上面。
就知道咋样了。
有人的想法是,
用了2进制就是错误的! 最好用3进制,比洋人大一号。
是没有问题的,称完全自主开发,就有点过了。
完全重写内核,既没有必要,也不会获得全面的性能提升,有源码,在需要的地方做优化就可以了。
这世上私有的OS林林总总,绝大多数都是这么改巴改巴改出来的。
当然了,要是商业上用的,得有办法避开商业风险,如果是国防用途的,能抄出来就得算本事了。