西西河

主题:【原创】关于麒麟操作系统内核,还想说两句 -- 闲云野熊

共:💬55 🌺42 新:
全看分页树展 · 主题 跟帖
家园 这样心平气和地讨论问题真让人心情愉快

先贴一个链接:麒麟官方承认非独立研发 采用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的报告我碍于手上的工作,没有仔细去对比,方法都在上面,如果有兴趣大家可以自己试试,看看到底哪些地方的代码是×有意义×的相似。

元宝推荐:铁手,
全看分页树展 · 主题 跟帖


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

Copyright © cchere 西西河