`
titanfoot
  • 浏览: 261132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于谷歌的开源平衡策略问与答

阅读更多

谷歌开源程序经理Chris DiBona的主要工作就是协调和平衡作用。

  众所周知,谷歌自己的高利润业务采用了大量的非自己开发的开源软件。但是正如它监督搜索技术公司的开源工作一样Chris DiBona也要给对方一些好处作为交换条件。只索取而不给与是违背常理的。

  业界支持自由和开源软件的声音是强大的,但是也有一些批评的言论。举例来说,有些人批评谷歌缺少对于Affero GPL许可的支持,这使得一些开发人员只能使用公共的网络服务分享他们对AGPL软件项目的修改。

  尽管如此,DiBona认为谷歌对待开源技术的策略是正确的并且公平的。谷歌一直在倡导“没有贡献就没有索取”这个哲学道理,把自己的对开源项目的修改反馈回去并试图以培育下一代的开源技术程序员。

  DiBona一直致力于开源软件达十年之久了。在为谷歌工作之前,DiBona在Slashdot工作,同时他还是一个有影响力的开源技术分析家。 Slashdot是著名Linux服务器制造商VA Linux Systems的一部分。VA Linux Systems在1999年进行了一个引人注目的首次公开招股活动,但不就大幅削减。

  DiBona将会在周三举行Google I/O大会上宣扬开源技术的福音,但在那之前,记者预先对DiBona进行了一次采访,听听他对谷歌开源软件的看法。

  问:谷歌内部对开源技术的看法是什么呢?

  答:我曾经问过我自己:“我努力工作是为谁呢?”开源商业世界?不是。开源技术爱好者社区?不是。我确实非常前往同开源开发人员一起工作。我们给我们 的集团提出了这样一些目标:支持开源开发,这也就是意味着支持开源基础设施;支持谷歌和业界开源代码的发布;培养更多的开源开发人员,因为特别是当我开始 在谷歌工作的时候,有一种看法认为谷歌从开源世界里挖走了很多人才,但之后却不从事开源技术工作。这种看法只是部分正确的,因为很多开源技术人员来到谷歌 说:“我一直工作在为开源项目工作,现在我想要接受一个全新的挑战。而我们恰恰有很多适合他们的新的挑战。所以他们就离开了开源领域。”

  这种情况太糟糕了。作为一个公司,我们希望有更多的开源软件发布,因为我们认为它非常重要。我们的产品中使用了很多开源技术和软件。我们的每一个工程 师都会在工作中使用开源技术。我们总是可以找到新的开源开发包和类库并把它们交给我们的开发人员使用。这就是我和我的小组的主要工作。当我们从开源社区引 入人才时,我们希望能确保更多的开源开发人员被培养并成长起来。这也正是我们在Google Summer of Code上极力提倡的观点,同时,我们还有一个专门的培训学校培养开源技术人才。我认为我们已经在培养开源技术人才方面给业界带来了实际的影响。

  对于既要对外界的开源项目作出贡献,又要维护自己内部的开发工作,你是怎么在这之间保持平衡的。

问:你是怎样通过外界的评价的?

  答:谷歌把一些项目看得要比其它项目更重要。很明显,Linux内核对于谷歌的重要性可以说是依赖性的。每一次你使用Google,你使用的电脑上就 运行着Linux内核。我们有一个相当大的内核开发团队,并且我们还聘请专门从事内核开发的工作人员。Andrew Morton就是一个很好的例子。我们会尽力保证这些技术人员随时都能修补程序(也就是对主要的开源项目提交其修改)。这通常更多地取决于工程师的时间。 我一直希望我们能对外界的开源项目能作出更多的贡献,但对工程师来说这是需要时间的。

  我们的编译器(一个能将程序员代码转换为计算机能理解的指令的软件)也面临着同样的情况。我们的编译器团队的“伟大之处”就在于他们把修补程序作为自 己的本职工作。他们一直在把我们内部的研发成果用来修补外部开源领域的项目。我们GCC团队最近推出的新连接器,Gold ---它的主要设计师是Ian Lance Taylor。Taylor之前曾在Vygnus工作过(开发GCC的公司)。他一直对海合会队永远。我们的很多员工都曾经在GCC工作过。

  很多谷歌的员工只想对现有的项目进行修补。他们发现一个错误,然后他们就想要添加新功能。这不会占用太多的时间。而我的团队的职责就是首先检查一下某 个工程师想要对外发布的前几个补丁,确保这个工程师知道他对外界开源项目做了什么,然后他基本就能够做自己想做的事情了。这个工程师还会让我们对于他发布 的布丁进行宣传。我们要确保我们的代码尽可能快地传递给外界的开源项目,因为项目是不断迭代不断发展的。如果我们没有对外发布我们的补丁,那么它们是不会 得到业界接受的,不久这些补丁就会因为时间太久而失去了效力。另一方面,开源项目收到的补丁越快对我们也就越有利,因为随着项目的不断发展,它会打上这些 补丁然后对产品进行更新,而我们使用这些新的产品时就不用再打补丁了。

  问:你们“吸收”的最重要的开源项目是什么?

  答:内核、编译器---GCC,Python解释程序是我们吸收的最重要的开源项目。Python我们来说非常重要。谷歌应用引擎(Google App Engine)基本上是一个Python托管系统。Java对我们来说也是非常重要的,它现在已经变成开源的了。我们现在已经有一些精通Java的工程师 ---Josh Block, Neil Gafter,他们对Java非常熟悉。

  一旦你获得这三个项目---编译器、语言、内核---之后你就可以去寻找开发库。对我们来说就是OpenSSL、zlib、PCRE。MySQL对我们来说非常重要。

  问:Java的开源已经对你们的业务产生了巨大影响吗?

  答:事实不是这样的。我认为Java的开源对外部世界的影响要比对我们的影响更大。Java现在已经是相当成熟的语言了。我们相当长的时间以来一直在 使用它。之前,最先开放的是控制Java未来的JCP(Java Community Process),但实际情况却是JCP并没有真正开放。因而,Java开源能到什么程度,尤其是J2ME(移动Java)和TCK(技术兼容套件),业 界有很多疑问。

  问:你是否正在使用一个超级定制的Linux内核?

  答:我不认为有这种超级定制的Linux内核。内核的灵活性是令人难以置信的。它具备所有的这些不同的架构。我认为Linux内核本身就是一个超级定制的东西。

  问:但是你们有很多内部定制吗?

  答:内部定制是有的,但不是很多。谷歌向业界暴露了一些有趣的硬件。因此,我们将会在内部对硬件抽取代码样本。所以,那些都是高度订户制的东西。但最 终会发布给外面的世界。我们资助了一家总部设在伯克利的机构Xorp共同进行研究,目的就是把高速Broadcom网络芯片功能移植到linux系统中。 我们的兴趣不在于自己单独控制这个项目。因此,它是定制花的吗?绝对是。但它大量定制吗?我不认为这它大量定制的。

问:外界说你们仍然在使用2.4内核,这是真的吗?

  答:在一些地方这是肯定的。

  问:那你们的核心搜索产品是不是也在使用2.4内核?

  答:人们提到谷歌时,通常认为搜索业务是处在一个静态的内核上,但实际情况并非如此。不同的数据中心情况不同。我认为内核2.6应该占主导地位。

  还有的被讨论互惠的。当通用公共许可(GPL)第3版问世以后,自由软件基金会(Free Software Foundation)把Affero从GPLv3中拆分了出来,形成了一个单独的许可。Eben Moglen(Software Freedom Law Center共同创始人)说,“如果谷歌开始变得太‘寄生性’,那么我们将重新评估它。”你对于这种负面的看法---索取大于贡献,有何担心呢?

  我对此确实有些。我认为这基本上是一个不正确的看法。虽然你一直就给予很多,但总是有一些人会感到不满意。我们可以得到更多的回报吗?当然。其中一个 改善这个问题的方法是通过类似于Summer of Code这样的项目。不算Android或者类似于GWT这样的大型开源项目,谷歌每两个或三个星期都会发布一个新项目,或者是每个月都会给很多项目发布 补丁,这些年来一直如此。我保守地估计了一下,每年我们发布的代码大约有100万行左右。

  如果你与开源开发人员---参与开源项目的工作人员---进行交流的话,我认为他们能了解这一点。我始终认为,社会爱好者会最终明白这些,我认为这是 一定的。还有一些人,总是给我们制造麻烦,因为我们并没有支持Affero式的GPL,但我们那么做是不实际的。当他们在GPLv3中包含 Affero式的条款时,我告诉Eben的是,“听着,你可以采取你想要的任何东西。我们将仍然尽可能多地支持FSF和SFLC,但这意味着我们将无法在 内部使用该许可,因为对我们来说那么做将是不切合实际的。”我认为这是一个很现实的回应。Affero GPL已经出台了。对于能用到它的人来说,它的确很伟大。但它却不适合我们。

  这就是免费软件的问题。你没有义务使用它。谷歌在这些事情方面的粒度控制足够细,我们不会使用我们不想使用的东西。

  问:你首选的许可是什么?

  答:我们一般是在Apache许可,也就是Apache 2下进行发布的。我们认为Apache 2的许可语言是最公平的。而GPL需要太多的管理和补丁流,我们在这上面花费的时间要比我们运行一个项目花费的时间还要多。Apache 2鼓励人们运行它,没有太多地繁文缛节。这就是我们发布代码的时候为什么使用Apache 2的原因,而不论是让人们采用我们确实很喜欢的技术,还是一些API的例子。这就是说,如果我们在GPL、LGPL、GPLv3、BSD下发布了产品,它 默认是支持Apache许可的。

  问:对于致力于重要开源项目的工作人员,你们的补贴如何?

  答:我们已经雇用了很多开源技术领域的专家,比如Jeremy Allison 和Andrew Morton。他们对于Google App Engine 和Mondrian做出了相当重大的贡献。我觉得让他们把开源项目作为自己工作的一部分是非常正常的,这样他们就能随时对他们正在使用的类库进行修补。我 们认为这要比仅仅让他做开源项目这种工作方式更健康。

问:你们在内部使用了很多开源技术。那么在使用这些技术之前,你们是否有某种形式的知识产权的审批或审查工作呢?

  答:这是一定的。通常我们有两种方法。当有人想要用一些来自外部的代码---开源的或商业的---我们会把这些代码放在一个特殊的我们称之为“第三方 ”的目录下。然后,我们会把它们放在一个说明文件里,这个说明文件详细描述了这些代码的出处、如何授权、授权的类别是什么等等。我们所寻求的东西是显而易 见的。也有一些项目的知识产权出处很可疑,而且我们知道这些情况,我们是决不会使用这些项目的。

  由于谷歌并没有发布很多软件,所以我们要比那些既发布硬件又发布软件的厂商要轻松得多。当我们发布软件的时候--- Google Search Appliance以及一些可下载的应用程序,我们也会根据情况采取不同的许可检查措施,我们所要做的就是过一点点额外的关注。同样地,当我们开发较大的 项目时,比如Google Android,我们有一个更高级别的检测过程---每两个星期,我们会聚在一起看看外界的许可状况是否发生了变化。

  跟踪模型确实很适合我们使用。我们有一些内置于开发平台内的工具,项目经理或产品发布经理可以按照这些工具的选项选择一定级别的警告,那么这些工具就 会告诉他们那些开源软件被使用了,以及如何遵守这些开源软件的规定,以免违反知识产权。利用这种方法,我们给项目经理带来了一面镜子,随时就能检查许可授 权问题。

  这是我们处理这种问题的第一种方式。第二种方法是,每当谷歌开发人员把修改的一段代码放到变更列表里面时,我们就用我们的代码搜索产品在互联网上进行 搜索,然后把这段代码与搜索到的所有已知的开源代码进行比较。然后寻找二者的交集。每当我们找到了一个交集,我就会停下来仔细检查一下,看看它是不是一个 真正的副本。如果是,我们确定它在正确的目录下并且被真确标示。如果它不是一个真正的副本,我们就会给开发人员联系以确保它被正确表示,以便我们能够用这 些许可做我们想做的事。

  这个工具目前正处于萌芽状态。我们正在试图找到如何让它自动化的方法。但它的确是一个伟大的‘发明’。我们团队的目标不是阻止研发过程,而是让开发人员能够使用尽可能多的开源代码。我们这种方式很健康,因为这样能保证开发人员所写代码的合法性。

  问:你们审核代码的专利或版权吗?

  答:事实上我们对此并不审核。我们有专门的法律人员负责跟踪这些事情。主要有两类法律人员:审核谷歌使用的外部代码的开源许可;审核谷歌发布代码的开源许可。在专利或版权方面,我们绝不能有任何含糊,因为它太‘狡猾’了。

  问:如果你曾经维护并发布过自己的开源代码或补丁程序,那么是不是更容易在谷歌获得聘用?

  答:如果你在开源领域有自己的一席之地,那么很明显他会对你有帮助。如果你自己就负责一个健康的开源项目,我相信它肯定会对你有利。雇用委员会聘用人 才的一个很重要的标准就是这个人过去是不是有过从事开源工作的经历。从个人的工作经历很容易就能确定这个人的水平。面试的内容很广,但是它并不是非常深, 因为它只有45分钟的时间。因此,在如此短的时间里,面试管如何才能真正感觉到面试人员很善于编程呢?很显然,工作经历是一个很好的证明。

  就此而言,开源技术与社会关系联系很紧密。

  开源确实能迅速揭示社会关系。你可以看看开源开发人员所写的代码,他们如何处理来自真实用户反馈的错误,如何处理真正的用户问题。这是一个令人难以置信的资源。

  Summer of Code不是一个真正招聘得计划。如果是这样的话,这个招聘计划可以称得上是一个非常昂贵的计划。去年我们创造了大约200行开源代码,来自全国的900 名学生参加了这次会议。在这些学生中,可能有三分之一还要继续参与这个项目,因为其余的都返回大学校园了。

  有一些学生已经参加该计划中两三年了。我们这个计划的主要目的是在暑假期间能给孩子们提供一个编程的平台,因而他们能够互相交互编程经验,更快地提高 编程水平,而是在整个暑假都从事与编程无关的其它工作。今年是我们实施这一计划的第四个年头了,而参加今年活动的学生有1109个并且遍布95个国家。

来源:enet硅谷动力

分享到:
评论

相关推荐

    开源项目-google-gvisor.zip

    **谷歌的gVisor:一个沙箱容器运行时** 谷歌的gVisor是一个开源项目,旨在为容器提供更高级别的安全防护。它被设计为一个沙箱容器运行时,能够...随着项目的不断优化,我们期待gVisor能在未来更好地平衡安全与性能。

    开源项目-google-puffs.zip

    "开源项目-google-puffs.zip" 是一个包含 Google PUFFS(Parsing Untrusted File Formats Safely)项目的压缩包。PUFFS 是一个由 Google 开发的开源库,专注于安全地解析不信任的文件格式。这个项目的主要目标是为...

    2048开源项目

    6. **版本控制与协作**:开源项目通常使用Git进行版本控制,开发者通过GitHub等平台进行代码提交、分支管理和问题追踪。这为我们提供了一个学习版本控制和协作流程的好机会。 7. **测试与调试**:为了确保游戏功能...

    cpp-Guetzli谷歌开源JPEG编码器Guetzli压缩35也能生成高质量图片

    Guetzli是谷歌推出的一款开源JPEG编码器,其主要特点是能够在大幅度压缩图片文件大小的同时,保持较高的图像质量。在当前的数字时代,图片处理和优化是至关重要的,尤其是在网页设计、社交媒体和云存储等领域。...

    开源项目-GoogleCloudPlatform-agones.zip

    Agones 是一个由 Google Cloud Platform 支持的开源项目,专为在 Kubernetes 上构建和管理高性能、可扩展的游戏服务器而设计。Kubernetes 是一个流行的容器编排系统,它允许开发者轻松地部署、管理和扩展分布式应用...

    What Would Google Do

    10. **隐私与社会责任**:随着数据隐私问题日益突出,谷歌如何平衡用户隐私和商业利益,对所有处理用户数据的公司都提出了挑战,需要在合规性和道德责任之间找到平衡。 通过阅读《What Would Google Do》,读者不仅...

    开源项目-golang-go.zip

    开源项目-golang-go.zip是一个与Go编程语言相关的开源项目,主要关注的是`sync`包的扩展,特别是关于“sharded values”的支持。Go语言是由Google开发的一种静态类型的、编译式的、并发型、垃圾回收的、C风格的编程...

    开源项目-golang-proposal.zip

    开源项目-golang-proposal.zip是一个聚焦于Go语言编译器改进的开源项目,特别是关于“Mid-stack inlining”(中间栈内联)的技术。在深入探讨这个话题之前,我们需要了解Go语言的基础和编译器的工作原理。 Go语言,...

    开源项目pedometer

    这就要求开发者考虑功耗和性能之间的平衡,可能需要用到事件驱动编程,以及合理的数据同步策略,确保数据的准确性而不会过度消耗电池。 3. **用户界面设计**:一个友好的用户界面对于用户体验至关重要。开发者需要...

    google相机4.3源代码

    【标题】"google相机4.3源代码"的解析与详解 在Android系统中,Google相机一直以来都是以其高质量的照片拍摄和先进的图像处理技术而受到用户的欢迎。这次我们讨论的是Google相机4.3版本的源代码,它是一个开源项目...

    IVBD『广海论坛广告服务中心html代码开源』

    4. **用户体验**:了解如何平衡广告展示与用户体验,避免过于侵扰用户,同时确保广告的有效展示。 5. **安全措施**:由于麒麟安全组的标签,这个代码可能包含防止广告欺诈、XSS攻击等的安全策略。 6. **资源管理**:...

    开源项目-allegro-bigcache.zip

    4. 缓存策略:根据业务需求选择合适的缓存淘汰策略,BigCache 提供了简单的 LRU(最近最少使用)策略。 为了深入了解和使用 Allegro BigCache,开发者可以研究源代码,查看项目文档,或者参考已有的示例。该项目的...

    开源项目-dgraph-io-badger.zip

    **开源项目-dgraph-io-badger.zip** Badger是由dgraph.io开发的一个高效、快速的键值存储系统,专门用Go语言编写的。这个开源项目旨在提供一个高性能、低延迟的解决方案,适用于需要大量数据存储和检索的应用场景。...

    how google test software

    本文将根据提供的部分信息,深入探讨谷歌在软件测试方面的理念、策略与技术,揭示其成功背后的秘诀。 ### 谷歌的测试哲学:融合自动化与人工 在《How Google Tests Software》一书中,作者James Whittaker强调了...

    开源项目-chrislusf-seaweedfs.zip

    每个Chunk Server都可以独立存储大量文件,而Master节点通过负载均衡策略将新的文件分配给合适的服务器,确保系统的平衡和高效。 4. **数据分布与冗余**: SeaweedFS允许用户自定义副本数量,通过在不同Chunk ...

Global site tag (gtag.js) - Google Analytics