西西河

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

共:💬55 🌺42 新:
分页树展主题 · 全看首页 上页
/ 4
下页 末页
    • 家园 技术上的东西黑白分明,揉不得半点沙子

      源代码不同,只可能导致编译后的目标机器代码指令差异度成倍的上升.

      更不用说只是功能界面相同的情况了.

      隔行如隔山,恕我直言,您是在对自己不了解的领域乱批评.

    • 家园 你这话就错大了

      我认为几种主要用途相近的操作系统,相同之处远远大于不同之处。尽管在界面上可能长得很不一样,很多命令的名称也不同,但本质应该是相近的或一致的。我大胆的猜想其内核的二进制代码会有多大差异,例如AIX与HP-UX、Solaris之间

      别说操作系统了,同是c语言,即使最简单的一个语句“a=b+c;”用不同的编译器编译出来的二进制可执行文件都不相同。

    • 家园 我来说两句吧

      首先,我不是操作系统的专家,对操作系统的经验主要限于操作系统里面网络部分的内核,--曾经在8位微处理平台上写过一个比较完整的从网卡驱动到socket层的stack。过程中主要参考了alan cox的net3源码,一开始想从那里起步来往小里改,但是后来发现因为资源差别太大,还不如从头自己写。以我的经验,各操作系统的具体实现差别可以很大,即使大家都是实现同样的tcpip协议。与你说的相反,往往是界面上相似(这个往往是有标准的),但内部差别很大。兼容问题也是一样,再次与你想的正相反。兼容需要的只是界面的兼容,内部实现可以千差万别。

      那篇分析相似性的文章我又找来看了一遍,可以看出作者有一定基础,也花了很大功夫。我对于他的方法有一些保留,因为他的去噪和排序造成的副作用值得推敲。一般比较被接受的方法是程序结构分析,也就是各函数间的调用关系图和各函数内部的流程分析,不过这些手段对于操作系统往往是太复杂了,是个相当工作量的项目。另外内核编译选项非常之多,源码内还常有各种#ifdef界定的码块可以有选择的编入,很难复制出同样的编译参数。

      但是我更看重他文中附录里对函数名的分析。以我对改内核的经验,直觉上麒麟主要是有选择的对原freebsd已有函数内容进行改动,以方便把国防科大的web服务器和一些实时方面的改进整合进来。这样的手法最快最经济。新增加的70几个函数,除去web服务器的,不知道还剩下多少?

      又仔细读了一遍报道原文,来推敲一下“自主研发的基本内核层和基于FreeBSD(一种Unix操作系统)改造的系统服务层组成”。系统服务层一般在操作系统概念里都是属于内核的,所以从这里看来似乎麒麟内核有“基本内核层”和“非基本内核层”的说法。那么什么是基本内核层呢?从通用的操作系统架构出发,一般os最基本的功能就是scheduler。结合原文特别提到麒麟实时功能更好,似乎可以推测麒麟的scheduler是自己的,可能还有相关的中断处理。

      关于仿,一般是这样的。如果被仿的是对方花大力气保密无处可抄的东西,那么你做出来是你的本事,这个叫“reverse engineering”,业界都是尊重的。但是如果仿的东西原版是公开的东西,那么就应该清楚地说明什么是你改进的,什么是原来的。这个是对原版作者知识产权的起码尊重。如果根本不提原作者,那么当然是赤裸裸的剽窃。如果提了,但是有意模糊改进部分和原作的界限,还是遮遮掩掩的剽窃。即使不公开源码(我个人感觉还是认为原因是不敢),公布个白皮书仔细描述一下哪些部分是改进就这么难吗?

      “完全自主研发”在今天的中国科技界被用得太滥了。不错,我相信当初对于母板是openbsd还是freebsd这个决定是“完全自主”决定的。同样不错,bsd license非常松,这样做不会有法律上的问题。但是用这个和不明具体比例的少量改动来大张旗鼓宣传“完全自主”“局面将被改变”就早已超出了搞技术的人尊重事实的基本职业操守。

      至于“专家”,恐怕也快是个骂人的词了吧。汉芯的事这么快就忘了?

      元宝推荐:懒厨,懒厨,

      本帖一共被 1 帖 引用 (帖内工具实现)
      • 家园 这位兄台的发言总是很有力量,鄙人敬仰一下

        尽管我们在具体意见上可能还有一些分歧。关于操作系统。下面的兄弟有些人提到由于CPU和硬件不同,所以代码肯定不同。这一点我是有异议的。因为UNIX操作系统是用高级语言写的,应该是硬件无关的,至于与硬件有关的部分应该集中在HAL层。

        你提到的区别也是在驱动一层,一般操作系统的驱动都会分为两部分,与硬件相关的部分(媒体访问层)和与硬件无关的(协议驱动层)部分。与硬件相关的部分肯定差异较大。在协议实现上可以差别很大,但也可以差别不大。这取决于你的意图。

        但是无论实现是否存在算法的差异,但调用的函数,函数经过编译,然后再经过反编译,其结果能不能看出差异,我是持怀疑态度的。例如,所有的IO处理不外乎是从某个地址读一段数据到某个地址。如果指令集相同,你认为会有多大差异?在你能够读懂全部指令的情况下或许你能比较出差异,在你只能一段一段猜测的情况下你读到的相同之处应该多于不同之处。

        关于你和那位分析员对麒麟内核的分析,我认为恰恰应该考虑由于麒麟明确声明利用改造了freeBSD的系统服务层,我认为这里面肯定有兼容性的考虑。可以肯定这些函数名称,包括调用方式的一致性。

        关于公开源码,我认为你的考虑过于单纯从技术角度出发了,你可以了解一下为什么微软拒绝向我国公布全部windows源码。为什么与其他国家不同对待。

        • 家园 我觉得你有个错误

          为什么你一定觉得操作系统的代码一定要相同呢?

          就算是实现同样的功能,不同的人肯定有不同的写法,

          因为是人在写代码,不是机器在复制代码.

          既然源代码都不相同了,怎么会得出有相同的机器代码

          的结论呢?

          • 家园 我已经说得很清楚了,不是说源代码相同

            而是由于功能相同,代码必定类似,使用二进制代码比较的方法未必能够发现其不同之处。你可以看看我楼下的帖子,请给我一个合理的解释。

            • 家园 随便拿本面向对象编程的书看看就知道你是错误的

              功能相似,不一定要求代码一样.

              邓小平说,白猫黑猫,过得河就是好猫.

              只要实现功能就可以了,要追求代码相似实在是太太太难了.

              不知道你编过程序没有,有没有看过很多代码.

              有时候我看人家的代码,真是感慨,原来代码是可以这样写的(好坏都这样说,呵呵).

              • 家园 错误可能千差万别,但正确的路并不多。

                也许你可以写出各种千奇百怪的代码,但正确的实现功能并且高性能的代码设计思路还是很有限的。

                再说我一直说得很清楚,我没有说麒麟没有抄袭freeBSD,只是说证据不足。那位澳大利亚读书的人搞的评测方法我认为是有问题的。上面我用同样的比较方法比较了两段文字,虽然是游戏之作,但我认为还是可以说明问题的,据我所知,麒麟团队邀请了这位作者去交流,说可以参观源代码。这起码反映了一种态度。

                我的意见是比较源代码才能有效确认麒麟是否自主开发功能多少,如果通过比较二进制代码的方式,这种比较起码要(1)比较两种以上功能用途相似,级别相当,但被确认各自具备独立知识产权的操作系统,比较结果其相似度低于一定标准;(2)至少两次以上分别比较两种相同渊源的操作系统,其相似度达到同样的标准。如果有一种比较方法能够达到以上要求,在比较麒麟和其他操作系统的相似性我认为才有说服力。

        • 家园 这位熊兄似乎不是搞软件技术的

          但是无论实现是否存在算法的差异,但调用的函数,函数经过编译,然后再经过反编译,其结果能不能看出差异,我是持怀疑态度的。例如,所有的IO处理不外乎是从某个地址读一段数据到某个地址。如果指令集相同,你认为会有多大差异?

          常用汉字3000个,熊兄,大家用来写文章,你认为会有多大差异。澳大利亚那哥们的文章有根有据,这才有麒麟羞羞答答把freebsd这7个字母放进新闻稿,要知道,在这之前,在他们的网站是只说“自主知识产权“,不提bsd的。这样的事情熊兄居然还一本正经地为它辩护,我真不知道说什么好。

          LVS这样让我钦佩的项目,它的leader好像也在国防科大。是非分明,熊兄不必用”国防科研产品“这几个字来吓唬俺们乡下人。

          • 家园 请看我使用同样比较方法的比较结果

            常用汉字3000个,熊兄,大家用来写文章,你认为会有多大差异。澳大利亚那哥们的文章有根有据,这才有麒麟羞羞答答把freebsd这7个字母放进新闻稿,要知道,在这之前,在他们的网站是只说“自主知识产权“,不提bsd的。这样的事情熊兄居然还一本正经地为它辩护,我真不知道说什么好。

            如你所言,常用汉字不过3000,昔,你用来写文章和我用来写,在文字上可能有很大差异。居住在澳大利亚那哥们写的文章我认为并不是有根有据的。但是麒麟的工作组还是大度的把freebsd这七个字母放进新闻稿。要知道,这人的方法是没有经过验证的,不能否认“自主知识产权”这样的事情兄居然还一本正经地质疑,我真不知道说什么好

            不好意思,以上本熊的文字与昔兄有61%以上的相似度,这还是去除了诸如相同的没有意义的标点符号之后的结果,根据我的分析,如果加上重复的标点符号,相似度更高,所以我基本上可以断定我们俩的意思是一样的。

            按照那位居住在澳大利亚的哥们自己的说法,他的实验结果表明,这种对比方法在分析明显具有血缘关系的两种windows系统时,测出的相关度很低。在我看来,起码说明这种方法非常不完善。我们为什么要对这种方法信奉不疑?我并不是说麒麟一定没有问题。但是对其质疑起码要有科学依据吧。

            • 家园 这样心平气和地讨论问题真让人心情愉快

              先贴一个链接:麒麟官方承认非独立研发 采用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时得出的相似性是很弱的。我认为这充分说明了这种方法的局限性,我个人对使用这种方法得出的结论是持保留态度的。

                顺便说一下,看到麒麟网站上介绍,麒麟的开发组是邀请这位质疑人士访问长沙的,并许诺可以看源代码,看项目组工作,但被这位作者婉拒。

分页树展主题 · 全看首页 上页
/ 4
下页 末页


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

Copyright © cchere 西西河