蚊章汇 - 开源软件
type: channel
link: https://linuxcn.bwsl.wang/tag/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6/
items: 衡量你的开源软件使用情况的 8 个方法
items: 共享、免费还是公有？开源软件的真正定义
items: 每日安全资讯：60% 的企业代码库包含开源漏洞
items: CIP：延续 Linux 之光
items: 从专有到开源的十个简单步骤
items: 因为这个我要点名批评 Hacker News
items: 放弃你的代码，而不是你的时间
items: 基于开源软件漏洞的攻击今年将上升 20%
items: Linux 的实用性 VS 行动主义
items: 开源的巨大胜利，印度强制要求其政府使用开源软件

衡量你的开源软件使用情况的 8 个方法
type: item
date: 2023-01-05T01:31:37+08:00
description: 想知道如何为你的开源软件项目收集使用指标？考虑一下使用这些替代方案的利弊。我们这些支持开源项目社区的人经常被问到很多有关使用指标的问题。这些指标通常是为了通过用户量和知名度来衡量软件的重要性。我们一般都想知道有多少人使用该软件，有多少次安装，以及有多少人生活接触过它。但简而言之，我们尚无法直接回答上述问题。如果你想要寻找一个明确的解决方案，那很抱歉要让你失望了。有关使用指标的问题，没有人有完美的答案，至少没有准确的答案。好消息是，有一些近似的和替代指标至少能够部分地满足你对软件使用情况了解的渴求。本文探讨了这些替代方案以及它们的优点和缺点。下载量当你浏览提供软件的网站时，你通常可以看到软件的下载次数。映入我脑海的一个例子是 Firefox ，它曾经有一个下载计数器。Firefox 的下载量是一个印象深刻的数字，给人的印象是 Firefox 是一个流行的浏览器，在一段时间内确实如此。然而，个人行为会直接影响这一数字的准确性。举例而言，当一个人定期重置他们的设备时，每一次重建都会引发一次独立的下载。考虑到这一现实，需要设计一种方法从下载量中去除几十次（或许是几百次）的下载次数，因为那是一个人。下载量不仅会高估使用量，还会低估使用量。例如，一个系统管理员可能会下载一个新版本的 Firefox 一次并将其拷贝到 U 盘上，然后安装到数百台设备上。下载量指标是易于收集的，你可以在服务器上记录每一个下载请求。问题在于你不知道在这些软件下载以后会发生什么。下载它的人是否如预期的那样使用软件，还是遇到了问题而放弃了它。对于开源项目而言，你可以考虑各种下载量指标，比如来自以下途径的下载指标：项目官网包管理器，比如 npm、PyPi 和 Maven代码仓库，如 GitHub、GitLab、Gitee 等你可能还对源代码的下载量感兴趣，因为下游项目更可能使用源代码形式（参见 《如何衡量你的开源项目的影响》一文）。相应的下载指标包括：从代码仓库克隆的数量，比如 GitHub、GitLab 和 Gitee从官网下载的归档文件（tar、zip）的数量通过像 npm、PyPi 和 Maven 这样的包管理器下载的源代码数量源代码的下载指标比二进制代码的下载指标更不可靠（虽然尚无相关研究表明如此）。试想一下，一名开发人员想要你的最新版本的源代码，并将他们的构建管道配置为每次构建都克隆你的仓库。再想象一下，一个自动构建过程失败了，它试图重新构建而不断地克隆你的版本库。你还可以考虑这样一个下载量低于预期的场景——源代码仓库在某些地方缓存了，下载来源是由这些缓存所提供的。相关阅读：跟踪你的开源社区的 5 个指标总而言之，下载量指标是用于提供当前使用情况和探测趋势的很好的指征。我们无法明确地定义一次下载是如何转化为使用的。不过我们可以认为增加的下载量是更多潜在用户的标志。举例而言，如果你为你的软件做了广告并在活动期间得到了更高的下载量，可以合理地假定广告推动了更多人下载该软件。下载行为的来源与元数据还可以提供额外的与使用行为相关的内容。你的软件的哪些版本仍在使用中？什么操作系统或者特定语言的版本更加流行？这有助于社区决定将哪个平台的软件作为支持与测试的优先选项。议题作为一个开源项目，你可能有一个议题追踪器。当某个人提出一个议题时一般有两个目标，报告一个漏洞或者请求增加一项功能。提议者很可能已经使用过你的软件了。作为一名用户，他可能发现了一个漏洞或者发现了对一个新功能的需求。很明显，大多数用户不会执行额外的步骤来提交议题。提议者是我们的忠实用户，我们对他们表示感谢。此外，通过提出议题，他们已经成为了非代码贡献者，他们也有希望成为代码贡献者。经验法则是大约每 10000 名用户中，可能有 100 名提议者，以及 1 名代码贡献者。当然取决于用户类型，上述比例可能有出入。回到指标问题，你可以将提议者数量作为评估使用量的下界。相关的指标包括：提议者数量活跃提议者的数量（在过去 6 个月内提出议题的提议者）同时有代码贡献的提议者的数量尚未解决的议题的数量对议题发布的评论数量邮件列表、论坛和问答网站很多开源项目都拥有用户邮件列表、论坛，并且出现在类似 Stack Overflow 的问答网站上。与提问者一样，在这些地方发帖的人可被视作用户的冰山一角。与邮件列表、论坛和问答网站上的社区活跃程度相关的指标也可用于反映用户数量的上升或下降。相关指标可以集中于以下地方的活动，包括：用户邮件列表的订阅量论坛用户的数量问题的数量答案的数量发布信息的数量上报功能为了获得精确的用户数量，一个方案是让软件在使用时上报信息。这是令人毛骨悚然的。想象一下，系统管理员的防火墙报告了一个非预期的到你的服务器的网络连接，你不仅无法再收到软件报告（被防火墙拦截了），恐怕连你的软件也可能在未来被禁止使用。负责…

共享、免费还是公有？开源软件的真正定义
type: item
date: 2020-03-19T18:48:48+08:00
description: 如果你认为开源软件是共享软件、免费软件和公有领域软件的代名词，那么你并不是唯一有这种看法的人。当你听到“ 开源软件 （ open source ） ”一词时，你是否认为它与诸如 共享软件 （ shareware ） 、 免费软件 （ freeware ） 或 公有领域软件 （ public domain ） 之类的术语同义？ 如果是这样的话，你并不是唯一有这种看法的人。在软件行业内外的许多人都认为这些术语是一样的。本文说明了这些术语的不同之处，认为开源是一种变革性的许可和开发模式。分享我与以上几种软件打交道的经验，可能是探究差异的最佳方法。共享软件和免费软件早在 1982 年，当我在 Apple II Plus 上用 BASIC 编写代码时，我就开始从事计算机程序员的工作。我回想起去家乡当地的计算机商店，并在塑料袋中找到看起来价格高昂的装有游戏和实用程序软件的软盘。请记住，这是从一个中学生的角度来看的。但是，有一些软件可以免费或以最低价格获得。依据具体许可模式，它被称为共享软件或免费软件。在共享软件模式下，你只能在一定时间内使用该软件，如果你发现它有用，则要求你将支票寄给该软件的作者。但是，某些共享软件实际上也鼓励你复制并提供给你的朋友。这种模式通常称为免费软件。也就是说，共享软件和免费软件确切定义之间的差异十分微小，因此很容易将两者简单地统称为“共享软件”。我虽不能肯定，但是我不记得我是否向任何软件作者提供过使用共享软件的费用，主要是因为我在十几岁的时候就没有钱，但是我肯定喜欢使用这些软件程序，并且从中学到了很多有关计算机的知识。回顾过去，我现在意识到，如果该软件是根据开源许可条款而非共享软件条款提供的，那么作为一名新兴的程序员，我本可以在成长中学到很多东西，并且可以取得更多成就。这是因为几乎没有共享软件会提供源代码（即，人类可读的软件形式）。共享软件还包含许可限制，禁止接收者试图泄露其源代码。如果无法访问源代码，则很难了解该软件的实际工作方式，从而很难扩展或更改其功能。这使得最终用户完全依赖共享软件原始作者进行任何更改或改进。使用共享软件模式，任何开发人员社区几乎都不可能对代码施加影响，并进一步围绕代码进行创新。再分发和商业使用也可能受到进一步的限制。尽管共享软件可能在价格方面是免费的（至少在最初是免费的），但它在自由权利方面并不是免费的，并且不允许你通过探索代码的内部原理来学习和创新。这就引出了一个大问题：它与开源软件有何不同？开源许可的基础首先，我们需要了解“开源”是指许可模式和软件开发模式，两者与共享软件都有很大不同。在一种称为非 “左版” （ copyleft ） 开源许可的开源形式下，向用户提供了关键的自由权利，例如对访问源代码没有限制；可以出于任何目的出售、使用或赠送该软件；可以修改软件。这种形式的许可也不需要支付任何使用费或许可费。因为许可是高度宽松的，不需要谈判就可以使用，这种许可模式的一个惊人结果是它具有独特的能力，可以使无数软件开发人员协作起来对代码进行新的、有用的更改和创新。尽管从技术上讲，在这种许可模式下不需要提供源代码，但是几乎所有人都可以使用它来查看、学习、修改和分发给他人。非“左版”开源许可的另一个方面是，此类软件的任何接收者都可以添加其他许可限制。这意味着以这种许可形式对代码进行许可的初始作者，无法阻止接收者可能依据限制性更强的条款不再进一步许可给其他人。例如：假设作者 Noah 编写了一些软件，并根据非“左版”开源许可将其分发给了接收者 Aviva。然后，Aviva 修改并改进了 Noah 的软件，她有权根据非“左版”开源许可条款使用该软件。然后，Aviva 可以决定对可能限制该软件使用的任何接收者施加进一步的限制，例如在何处或如何使用它（例如，Aviva 可以增加一项限制，规定该软件只能在以下地区使用：加利福尼亚，并且不允许在任何核电厂中使用）。 即使 Aviva 可以访问源代码，也可以选择永远不将修改后的源代码发布给他人。不幸的是，有无数的专有软件公司以上述方式使用非“左版”开源许可软件。实际上，共享软件程序可以通过添加共享软件类型限制（例如，无法访问源代码或排除商业用途）来使用非“左版”开源许可软件，从而将非“左版”开源许可代码转换为共享软件许可模式。幸运的是，许多使用非“左版”开源许可软件的专有软件公司都看到了发布源代码的好处。这些组织一般通过诸如 GitHub 之类的软件存储平台向其接收者或更广泛的开源社区提供修改后的源代码，从而继续保持开源模式的持久性，实现创新的良性循环。这并不是完全出于慈善目的（或者至少通常不是这样）：这些公司希望鼓励社区创新和进一步改进，从而使他们也一并受益。同时，许多专有软件公司不选择这样做，这也完全符合非“左版”开源许可证条款的规定。“左版”许可的开源…

每日安全资讯：60% 的企业代码库包含开源漏洞
type: item
date: 2019-05-02T18:43:00+08:00
description: 近日， 黑鸭软件 （ Black Duck Software ） 发布了开源安全与风险分析（OSSRA）年度报告，报告对 2018 年以来 1200 多个商业代码库的匿名数据进行了分析和研究。对当今的企业来说，开源软件、库和组件往往起着重要的作用。开源代码采用率高有许多原因，其中包括开源社区的许多程序员愿意为项目贡献时间、项目代码的透明性、以及比开发内部系统更少的实现时间等。在黑鸭审查的所有代码库中，有 96% 包含了开源组件，而大多数没有开源代码的代码库其实包含不到 1000 个文件。在超过 1000 个文件的代码库中，开源代码的采用率高达 99%。开源代码有着它的安全优势，但也存在着安全漏洞未修补的隐患，开发人员可能没意识到项目正在被安全漏洞影响。在报告审查的代码库中，至少包含一个漏洞的代码库占 60% ，这个数字比 2017 年统计的结果 78% 有所下降。黑鸭认为，发现的漏洞有 40% 都是关键级的。“事实上，开源并不总是更安全。”报告指出，无论项目源码是专有的还是开源的，都可能因为漏洞的存在，安全性变得薄弱。项目人员应该及时加以识别和修补这些漏洞。报告中发现漏洞的平均“年龄”为 6.6 岁。其中，最老的 CVE-2000-0388 是 FreeBSD libmytinfo 库中的缓冲区溢出漏洞，在 28 年前被披露。报告结果显示，有 43% 的代码库包含一个超过 10 年的 bug。这表明不少企业可能没意识到开源的用处，也没有对组件目录进行系统管理，这些软件没有打新的补丁，更容易被攻击。“一般只有少数开源漏洞，比如那些影响 ApacheStruts 或 OpenSSL 的漏洞，有可能被广泛利用。”研究人员表示，项目组织应该把他们的开源漏洞管理和缓解工作的重点放在 cvss 评分和漏洞的可用性上，在关注 “0day” 的同时，也应该关注开源组件的生命周期。来源：开源中国更多资讯黑客届“奥斯卡”来了！国际安全技术大牛 5 月底齐聚北京随着网络安全问题越来越引发全球关注，对黑客、安全漏洞等话题感兴趣的极客和技术爱好者们将在北京迎来盛会。有黑客界“奥斯卡”之称的 DEF CON 近日宣布，即将举办 DEF CON CHINA Baidu 安全行业国际峰会，5月31日至6月2日，数千名全球安全技术大牛将齐聚北京 751D·PARK，同台切磋技艺。来源： 北京日报客户端 详情： http://t.cn/ESl6YeJ还在随便下载软件？CNCERT 公布 116 个高危恶意程序2019 年 2 月期间，国家互联网应急中心（简称“CNCERT”）在全国范围内继续开展计算机恶意程序传播渠道安全监测工作，对已备案的计算机软件下载站进行安全监测，判定计算机恶意程序 216 个，其中高危恶意程序 116 个，涉及 8 个省份的 11 家软件下载站及应用商店。2019 年 4 月下旬，CNCERT 将本次监测结果形成报告对外发布。来源： FreeBuf.COM详情： http://t.cn/ESl6mGB阿桑奇在英被判 50 周监禁处罚据英国“天空新闻”刚刚消息，维基解密创始人阿桑奇在英被判50个星期监禁。“你曾有一个选择，你选择的行动就是犯罪，”该法院法官德博拉·泰勒在法庭上说，“你没有心甘情愿地投向......你不会自愿到法院来。”随后，泰勒宣布阿桑奇被判“50 周监禁”。来源： 环球科技详情： http://t.cn/ESlXhc5Windows 10 的安全功能使得基于 Chromium 的浏览器运行慢了三倍多正如 Vivaldi 开发人员所揭示的那样，Windows 10 中内置的安全功能使基于 Chromium 的浏览器在测试环境中的速度降低了三倍多。Yngve Pettersen 在博客文章中解释说，开发人员在将 Windows 10 测试人员添加到 Windows 单元测试集群时发现了这个性能问题。来源： cnBeta.COM详情： http://t.cn/ESlXLjD （信息来源于网络，安华金和搜集整理）

CIP：延续 Linux 之光
type: item
date: 2018-08-05T00:24:37+08:00
description: CIP 的目标是创建一个基本的系统，使用开源软件来为我们现代社会的基础设施提供动力。现如今，现代民用基础设施遍及各处 —— 发电厂、雷达系统、交通信号灯、水坝和天气系统等。这些基础设施项目已然存在数十年，这些设施还将继续提供更长时间的服务，所以安全性和使用寿命是至关重要的。并且，其中许多系统都是由 Linux 提供支持，它为技术提供商提供了对这些问题的更多控制。然而，如果每个提供商都在构建自己的解决方案，这可能会导致分散和重复工作。因此， 民用基础设施平台 Civil Infrastructure Platform （CIP）最首要的目标是创造一个开源基础层，提供给工业设施，例如嵌入式控制器或是网关设备。担任 CIP 的技术指导委员会主席的 Yoshitake Kobayashi 说过，“我们在这个领域有一种非常保守的文化，因为一旦我们建立了一个系统，它必须得到长达十多年的支持，在某些情况下超过 60 年。这就是为什么这个项目被创建的原因，因为这个行业的每个使用者都面临同样的问题，即能够长时间地使用 Linux。”CIP 的架构是创建一个非常基础的系统，以在控制器上使用开源软件。其中，该基础层包括 Linux 内核和一系列常见的开源软件如 libc、busybox 等。由于软件的使用寿命是一个最主要的问题，CIP 选择使用 Linux 4.4 版本的内核，这是一个由 Greg Kroah-Hartman 维护的长期支持版本。合作由于 CIP 有上游优先政策，因此他们在项目中需要的代码必须位于上游内核中。为了与内核社区建立积极的反馈循环，CIP 聘请 Ben Hutchings 作为 CIP 的官方维护者。Hutchings 以他在 Debian LTS 版本上所做的工作而闻名，这也促成了 CIP 与 Debian 项目之间的官方合作。在新的合作下，CIP 将使用 Debian LTS 版本作为构建平台。 CIP 还将支持 Debian 长期支持版本（LTS），延长所有 Debian 稳定版的生命周期。CIP 还将与 Freexian 进行密切合作，后者是一家围绕 Debian LTS 版本提供商业服务的公司。这两个组织将专注于嵌入式系统的开源软件的互操作性、安全性和维护。CIP 还会为一些 Debian LTS 版本提供资金支持。Debian 项目负责人 Chris Lamb 表示，“我们对此次合作以及 CIP 对 Debian LTS 项目的支持感到非常兴奋，这样将使支持周期延长至五年以上。我们将一起致力于为用户提供长期支持，并为未来的城市奠定基础。”安全性Kobayashi 说过，其中最需要担心的是安全性。虽然出于明显的安全原因，大部分民用基础设施没有接入互联网（你肯定不想让一座核电站连接到互联网），但也存在其他风险。仅仅是系统本身没有连接到互联网，这并不意味着能避开所有危险。其他系统，比如个人移动电脑也能够通过接入互联网而间接入侵到本地系统中。如若有人收到一封带有恶意文件作为电子邮件的附件，这将会“污染”系统内部的基础设备。因此，至关重要的是保持运行在这些控制器上的所有软件是最新的并且完全修补的。为了确保安全性，CIP 还向后移植了 内核自我保护 Kernel Self Protection （KSP）项目的许多组件。CIP 还遵循最严格的网络安全标准之一 —— IEC 62443，该标准定义了软件的流程和相应的测试，以确保系统更安全。展望未来随着 CIP 日趋成熟，官方正在加大与各个 Linux 提供商的合作力度。除了与 Debian 和 freexian 的合作外，CIP 最近还邀请了企业 Linux 操作系统供应商 Cybertrust Japan Co., Ltd. 作为新的银牌成员。Cybertrust 与其他行业领军者合作，如西门子、东芝、Codethink、日立、Moxa、Plat'Home 和瑞萨，致力于为未来数十年打造一个可靠、安全的基于 Linux 的嵌入式软件平台。这些公司在 CIP 的保护下所进行的工作，将确保管理我们现代社会中的民用基础设施的完整性。想要了解更多信息，请访问 民用基础设施官网。via: https://www.linux.com/blog/2018/6/cip-keeping-lights-linux作者：Swapnil Bhartiya 选题：lujun9972 译者：wyxplus 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

从专有到开源的十个简单步骤
type: item
date: 2018-05-16T16:12:18+08:00
description: 这个共同福利并不适用于专有软件：保持隐藏的东西是不能照亮或丰富这个世界的。“开源软件肯定不太安全，因为每个人都能看到它的源代码，而且他们能重新编译它，用他们自己写的不好的东西进行替换。”举手示意：谁之前听说过这个说法？ 注1当我和客户讨论的时候（是的，他们有时候会让我和客户交谈），对于这个领域 注2 的人来说种问题是很常见的。在前一篇文章中，“[许多只眼睛的审查并不一定能防止错误代码]”，我谈论的是开源软件（尤其是安全软件）并不能神奇地比专有软件更安全，但是和专有软件比起来，我每次还是比较青睐开源软件。但我听到“关于开源软件不是很安全”这种问题表明了有时候只是说“开源需要参与”是不够的，我们也需要积极的参与辩护 注3 。我并不期望能够达到牛顿或者维特根斯坦的逻辑水平，但是我会尽我所能，而且我会在结尾做个总结，如果你感兴趣的话可以去快速的浏览一下。关键因素首先，我们必须明白没有任何软件是完美的 注6 。无论是专有软件还是开源软件。第二，我们应该承认确实还是存在一些很不错的专有软件的，以及第三，也存在一些糟糕的开源软件。第四，有很多非常聪明的，很有天赋的，专业的架构师、设计师和软件工程师设计开发了专有软件。但也有些问题：第五，从事专有软件的人员是有限的，而且你不可能总是能够雇佣到最好的员工。即使在政府部门或者公共组织 —— 他们拥有丰富的人才资源池，但在安全应用这块，他们的人才也是有限的。第六，可以查看、测试、改进、拆解、再次改进和发布开源软件的人总是无限的，而且还包含最好的人才。第七（也是我最喜欢的一条），这群人也包含很多编写专有软件的人才。第八，许多政府或者公共组织开发的软件也都逐渐开源了。第九，如果你在担心你在运行的软件的不被支持或者来源不明，好消息是：有一批组织 注7 会来检查软件代码的来源，提供支持、维护和补丁更新。他们会按照专利软件模式那样去运行开源软件，你也可以确保你从他们那里得到的软件是正确的软件：他们的技术标准就是对软件包进行签名，以便你可以验证你正在运行的开源软件不是来源不明或者是恶意的软件。第十（也是这篇文章的重点），当你运行开源软件，测试它，对问题进行反馈，发现问题并且报告的时候，你就是在为 共同福利 commonwealth 贡献知识、专业技能以及经验，这就是开源，其因为你的所做的这些而变得更好。如果你是通过个人或者提供支持开源软件的商业组织之一 注8 参与的，你已经成为了这个共同福利的一部分了。开源让软件变得越来越好，你可以看到它们的变化。没有什么是隐藏封闭的，它是完全开放的。事情会变坏吗？是的，但是我们能够及时发现问题并且修复。这个共同福利并不适用于专有软件：保持隐藏的东西是不能照亮或丰富这个世界的。我知道作为一个英国人在使用 共同福利 commonwealth 这个词的时候要小心谨慎的；它和帝国连接着的，但我所表达的不是这个意思。它不是克伦威尔 注9 在对这个词所表述的意思，无论如何，他是一个有争议的历史人物。我所表达的意思是这个词有“共同”和“福利”连接，福利不是指钱而是全人类都能拥有的福利。我真的很相信这点的。如果i想从这篇文章中得到一些虔诚信息的话，那应该是第十条 注10 ：共同福利是我们的遗产，我们的经验，我们的知识，我们的责任。共同福利是全人类都能拥有的。我们共同拥有它而且它是一笔无法估量的财富。便利贴（几乎）没有一款软件是完美无缺的。有很好的专有软件。有不好的专有软件。有聪明，有才能，专注的人开发专有软件。从事开发完善专有软件的人是有限的，即使在政府或者公共组织也是如此。相对来说从事开源软件的人是无限的。…而且包括很多从事专有软件的人才。政府和公共组织的人经常开源它们的软件。有商业组织会为你的开源软件提供支持。贡献--即使是使用--为开源软件贡献。脚注注1： 好的--你现在可以放下手了注2：这应该大写吗？有特定的领域吗？或者它是如何工作的？我不确定。注3：我有一个英国文学和神学的学位--这可能不会惊讶到我的文章的普通读者 注4 。注4： 我希望不是，因为我说的太多神学了 注5 。但是它经常充满了冗余的，无关紧要的人文科学引用。注5： Emacs，每一次。注6： 甚至是 Emacs。而且我知道有技术能够去证明一些软件的正确性。（我怀疑 Emacs 不能全部通过它们...）注7： 注意这里：我被他们其中之一 Red Hat 所雇佣，去查看一下--它是一个有趣的工作地方，而且我们经常在招聘。注8： 假设他们完全遵守他们正在使用的开源软件许可证。注9： 昔日的“英格兰、苏格兰、爱尔兰的上帝守护者”--比克伦威尔。注10： 很明显，我选择 Emacs 而不是 Vi 变体。这篇文章原载于 [Alice, Eve, and Bob - a security blog] 而且已经被授权重新发布。via:…

因为这个我要点名批评 Hacker News
type: item
date: 2017-12-16T08:08:49+08:00
description: “实现高速缓存会花费 30 个小时，你有额外的 30 个小时吗？ 不，你没有。我实际上并不知道它会花多少时间，可能它会花五分钟，你有五分钟吗？不，你还是没有。为什么？因为我在撒谎。它会消耗远超五分钟的时间。这一切把问题简单化的假设都只不过是程序员单方面的乐观主义。”— 出自 Owen Astrachan 教授于 2004 年 2 月 23 日在 CPS 108 上的讲座指责开源软件总是离奇难用已经不是一个新论点了；这样的论点之前就被很多比我更为雄辩的人提及过，甚至是出自一些人非常推崇开源软件的人士口中。那么为什么我要在这里老调重弹呢？在周一的 Hacker News 期刊上，一段文章把我逗乐了。文章谈到，一些人认为 编写代码实现和一个跟 StackOverflow 一样的系统可以简单到爆，并自信的 声称他们可以在 7 月 4 号的周末就写出一版和 StackOverflow 原版一模一样的程序，以此来证明这一切是多么容易。另一些人则插话说，现有的那些仿制产品 就已经是一个很好的例证了。秉承着自由讨论的精神，我们来假设一个场景。你在思考了一阵之后认为你可以用 ASP.NET MVC 来编写一套你自己的 StackOverflow 。我呢，在被一块儿摇晃着的怀表催眠之后，脑袋又挨了别人一顿棒槌，然后像个二哈一样一页一页的把 StackOverflow 的源码递给你，让你照原样重新拿键盘逐字逐句的在你的环境下把那些代码再敲一遍，做成你的 StackOverflow。假设你可以像我一样打字飞快，一分钟能敲 100 个词 (也就是大约每秒敲八个字母)，但是却可以牛叉到我无法企及的打字零错误率。从 StackOverflow 的大小共计 2.3MB 的源码来估计（包括 .CS、 .SQL、 .CSS、 .JS 和 .aspx 文件），就单单是照着源代码这么飞速敲一遍而且一气呵成中间一个字母都不错，你也要差不多用掉至少 80 个小时的时间。或者你打算从零开始编码实现你自己的 StackOverflow，虽然我知道你肯定是不会那样做的。我们假设你从设计程序，到敲代码，再到最终完成调试只需要区区十倍于抄袭 StackOverflow 源代码的时间。即使在这样的假设条件下，你也要耗费几周的时间昼夜不停得狂写代码。不知道你是否愿意，但是至少我可以欣然承认，如果只给我照抄 StackOverflow 源代码用时的十倍时间来让我自己写 StackOverflow，我可是打死也做不到。好的，我知道你在听到这些假设的时候已经开始觉得泄气了。你在想，如果不是全部实现，而只是实现 StackOverflow 大部分 的功能呢？这总归会容易很多了吧。好的，问题是什么是 “大部分” 功能？如果只去实现提问和回答问题的功能？这个部分应该很简单吧。其实不然，因为实现问和答的功能还要求你必须做出一个对问题及其答案的投票系统，来显示大家对某个答案是赞同还是反对。因为只有这样你才能保证提问者可以得到这个问题的唯一的可信答案。当然，你还不能让人们赞同或者反对他们自己给出的答案，所以你还要去实现这种禁止自投自票的机制。除此之外，你需要去确保用户在一定的时间内不能赞同或反对其他用户太多次，以此来防止有人用机器人程序作弊乱投票。你很可能还需要去实现一个垃圾评论过滤器，即使这个过滤器很基础很简陋，你也要考虑如何去设计它。而且你恐怕还需要去支持用户图标（头像）的功能。并且你将不得不寻找一个自己真正信任的并且与 Markdown 结合很好的干净的 HTML 库（当然，假设你确实想要复用 StackOverflow 的 那个超棒的编辑器 ）。你还需要为所有控件购买或者设计一些小图标、小部件，此外你至少需要实现一个基本的管理界面，以便那些喜欢捣鼓的用户可以调整和改动他们的个性化设置。并且你需要实现类似于 Karma 的声望累积系统，以便用户可以随着不断地使用来稳步提升他们的话语权和解锁更多的功能以及可操作性。但是如果你实现了以上所有功能，可以说你就已经把要做的都做完了。除非……除非你还要做全文检索功能。尤其是在“边问边搜”（动态检索）的特性中，支持全文检索是必不可少的。此外，录入和显示用户的基本信息，实现对问题答案的评论功能，以及实现一个显示热点提问的页面，以及热点问题和帖子随着时间推移沉下去的这些功能，都将是不可或缺的。另外你肯定还需要去实现回答奖励系统，并支持每个用户用多个不同的 OpenID 账户去登录，然后将这些相关的登录事件通过邮件发送出去来通知用户，并添加一个标签或徽章系统，接着允许管理员通过一个不错的图形界面来配置这些标签和 徽章 Badge 。你需要去显示用户的 Karma 历史，以及他们的历史点赞和差评。而且整个页面还需要很流畅的展开和拉伸，因为这个系统的页面随时都可能被 …

放弃你的代码，而不是你的时间
type: item
date: 2017-11-24T15:08:00+08:00
description: 作为软件开发人员，我认为我们可以认同开源代码 注1 已经改变了世界。它的公共性质去除了壁垒，可以让软件可以变的最好。但问题是，太多有价值的项目由于领导者的精力耗尽而停滞不前：“我没有时间和精力去投入开源了。我在开源上没有得到任何收入，所以我在那上面花的时间，我可以用在‘生活上的事’，或者写作上……正因为如此，我决定现在结束我所有的开源工作。”—— Ryan Bigg，几个 Ruby 和 Elixir 项目的前任维护者“这也是一个巨大的机会成本，由于我无法同时学习或者完成很多事情，FubuMVC 占用了我很多的时间，这是它现在必须停下来的主要原因。”—— 前 FubuMVC 项目负责人 Jeremy Miller“当我们决定要孩子的时候，我可能会放弃开源，我预计最终解决我问题的方案将是：核武器。”—— Nolan Lawson，PouchDB 的维护者之一我们需要的是一种新的行业规范，即项目领导者将总是能获得（其付出的）时间上的补偿。我们还需要抛弃的想法是， 任何提交问题或合并请求的开发人员都自动会得到维护者的注意。我们先来回顾一下开源代码在市场上的作用。它是一个积木。它是实用软件，是企业为了在别处获利而必须承担的成本。如果用户能够理解该代码的用途并且发现它比替代方案（闭源专用、定制的内部解决方案等）更有价值，那么围绕该软件的社区就会不断增长。它可以更好，更便宜，或两者兼而有之。如果一个组织需要改进该代码，他们可以自由地聘请任何他们想要的开发人员。通常情况下为了他们的利益会将改进贡献给社区，因为由于代码合并的复杂性，这是他们能够轻松地从其他用户获得未来改进的唯一方式。这种“引力”倾向于把社区聚集在一起。但是它也会加重项目维护者的负担，因为他们必须对这些改进做出反应。他们得到了什么回报？最好的情况是，这些社区贡献可能是他们将来可以使用的东西，但现在不是。最坏的情况下，这只不过是一个带着利他主义面具的自私请求罢了。有一类开源项目避免了这个陷阱。Linux、MySQL、Android、Chromium 和 .NET Core 除了有名，有什么共同点么？他们都对一个或多个大型企业具有战略性重要意义，因为它们满足了这些利益。聪明的公司商品化他们的商品，没有什么比开源软件便宜的商品了。红帽需要那些使用 Linux 的公司来销售企业级 Linux，Oracle 使用 MySQL 作为销售 MySQL Enterprise 的引子，谷歌希望世界上每个人都拥有电话和浏览器，而微软则试图将开发者锁定在平台上然后将它们拉入 Azure 云。这些项目全部由各自公司直接资助。但是那些其他的项目呢，那些不是大玩家核心战略的项目呢？如果你是其中一个项目的负责人，请向社区成员收取年费。开放的源码，封闭的社区。给用户的信息应该是“尽你所愿地使用代码，但如果你想影响项目的未来，请为我们的时间支付。”将非付费用户锁定在论坛和问题跟踪之外，并忽略他们的电子邮件。不支付的人应该觉得他们错过了派对。还要向贡献者收取合并非普通的合并请求的时间花费。如果一个特定的提交不会立即给你带来好处，请为你的时间收取全价。要有原则并记住 YAGNI。这会导致一个极小的社区和更多的分支么？绝对。但是，如果你坚持不懈地构建自己的愿景，并为其他人创造价值，他们会尽快为要做的贡献而支付。合并贡献的意愿是稀缺资源。如果没有它，用户必须反复地将它们的变化与你发布的每个新版本进行协调。如果你想在代码库中保持高水平的概念完整性，那么限制社区是特别重要的。有自由贡献政策的无领导者项目没有必要收费。为了实现更大的愿景，而不是单独为自己的业务支付成本，而是可能使其他人受益，去众筹吧。有许多成功的故事：Font Awesome 5Ruby enVironment Management (RVM)Django REST framework 3众筹有局限性。它不适合大型项目。但是，开源代码也是实用软件，它不需要雄心勃勃、冒险的破局者。它已经一点点地渗透到每个行业。这些观点代表着一条可持续发展的道路，也可以解决开源的多样性问题，这可能源于其历史上无偿的性质。但最重要的是，我们要记住，我们一生中只留下那么多的按键次数，而且我们总有一天会后悔那些我们浪费的东西。注 1 ：当我说“开源”时，我的意思是代码许可以某种方式来构建专有的东西。这通常意味着一个宽松许可证（MIT 或 Apache 或 BSD），但并非总是如此。Linux 是当今科技行业的核心，但是是以 GPL 授权的。感谢 Jason Haley、Don McNamara、Bryan Hogan 和 Nadia Eghbal 阅读了这篇文章的草稿。via: http://wgross.net/essays/give-away-your-code-but-never…

基于开源软件漏洞的攻击今年将上升 20%
type: item
date: 2017-02-07T20:49:50+08:00
description: 随着开源代码在商业和家用应用上越来越流行，基于它的漏洞的攻击也日益增多，据黑鸭子软件对收集的开源项目的数据统计，其预计今年的攻击增长 20% 。黑鸭子软件安全战略部的副总经理 Mike Pittenger 介绍说，包含了 50% 以上的自由、开放源软件的商业软件项目占比从 2011 年的 3% 上升到今天的 33%。他说，平均每个商业应用使用超过 100 个开源组件，而三分之二的商业应用代码带有已知漏洞。更糟糕的是，软件的买家常常无法知道他们购买的软件中有哪些开源组件。相关阅读： 浪漫开发：如何避免使用开源时易受攻击感“一般来说，公司并不乐于提供这些”，他说到。他们为客户提供的组件列表常常是不完整的。“如果你未经他们同意就扫描二进制码，你很可能违反了他们的许可协议，给自己带来很多麻烦”。一些大公司买家可能有权要求他们完整披露，并由第三方比如黑鸭子软件进行扫描验证。完全避免开源软件并不是一个好的选择。很多开源库是事实上的工业标准，而且从头开始写同样的代码太耗费时间，延误了投放市场的时间，损害了公司的竞争力。因此，商业软件商使用开源代码的越来越多，这个趋势在加速，Pittenger 说到。同样的逻辑适用于企业自建软件， ISACA 思维领导与研究部门总监 Ed Moyle 说。ISACA 是 IT 和 网络安全专业人员的一个全球化组织。“也有很多社区支持活跃的项目，带来可靠的安全和功能更新”，他补充说。“在特定情况下，如果能够审计代码会带来安全的好处，当然也带来了高度定制软件的能力。按照以往经验，如果一个商业工具能够做什么事，很可能就会有开源工具提供同样的功能。”但是，“多个眼睛”来检查开源代码漏洞的方式并不总能有好的效果。“任何人都可以审计代码，但也可能每个人都认为有人来审计，结果最终谁都没有做此事。” 来自 AlienVault 的安全顾问 Javvad Malik 说。“这是一个问题。”结果，管理开源组件越来越棘手，而那些坏家伙们也意识到这一点。开源代码到处都是，所以攻击者可以使用同样的利用方式寻找一大批目标。由于跟踪开源代码的困难，使用者常常不打补丁和更新，这样，黑客可以利用已知漏洞和已公布的缺陷利用例子。物联网的兴起去年也成为了一个主要的安全问题，今年将继续是一个主要问题，专家们预测。“智能设备和物联网中使用了许多开源软件，这正是 Mirai 僵尸网络病毒利用的漏洞，”Malik 说。（LCTT 译注：自 2016 年 9 月黑客操控感染了恶意软件 Mirai 的物联网设备发起了 DDoS 攻击，影响波及很多著名网站，并导致服务中断，影响颇深颇广。）同时，开发者常常不检查开源代码漏洞，或者怀疑有问题但由于最后期限的压力，而直接使用了。所以，不只是未打补丁的漏洞存在着，还有新写的代码会集成进去旧的、已知的漏洞，黑鸭子软件的 Pittenger 说到。商业软件项目中的漏洞平均存活时间为 5 年，他说到。心血漏洞这个漏洞早在 2014 年初就在 OpenSSL 库中发现，并被广泛宣传。但去年，在测试的应用中仍有 10% 存在此漏洞。此外，每年有 2000 到 4000 个新漏洞被发现，Pittenger 补充说。要解决这个问题，需要软件商和顾客的切实行动，以及企业级软件开发者的安全意识——不过目前看在最终改善前，形势很可能还要恶化。欢迎对此提出您的评论。

Linux 的实用性 VS 行动主义
type: item
date: 2016-12-10T17:49:00+08:00
description: 我们使用 Linux 是因为它比其他操作系统更实用，还是其他更高级的理由呢？运行 Linux 的最吸引人的事情之一就是它所提供的自由。 Linux 社区之间的分野在于我们如何看待这种自由。对一些人来说，使用 Linux 可以享受到不受供应商限制或避免高昂的软件成本的自由。大多数人会称这个是一个实用性的考虑。而其它用户会告诉你，他们享受的是自由软件的自由。那就意味着拥护支持 自由软件运动 Free Software Movement 的 Linux 发行版，完全避免专有软件和所有相关的东西。在这篇文章中，我将带你比较这两种自由的区别，以及它们如何影响 Linux 的使用。专有的问题大多数 Linux 用户有一个共同点，就是他们尽量避免使用专有软件。对像我这样的实用主义的爱好者来说，这意味着我能够控制我的软件支出，以及避免过度依赖特定供应商。当然，我不是一个程序员……所以我对安装软件的调整是十分微小的。但也有一些个别情况，对应用程序的小调整就意味着它要么能工作，要么不能。还有一些 Linux 爱好者，倾向于避开专有软件，因为他们觉得使用它们是不道德的。通常这里主要的问题是使用专有软件会剥夺或者干脆阻碍你的个人自由。像这些用户更喜欢使用 Linux 发行版和软件来支持 自由软件理念 。虽然它与开源的概念相似并经常直接与之混淆，但它们之间还是有些差异的 。因此，问题就在这里：像我这样的用户往往将便利性置于纯粹的软件自由的理念之上。不要误会我的意思，像我这样的人喜欢使用符合自由软件理念的软件，但我们也更有可能做出让步（使用专有软件），以完成特定的任务。这两种类型的 Linux 爱好者都喜欢使用非专有软件的解决方案。但是，自由软件倡导者根本不会去使用专有软件，而实用主义用户会选择具有最佳性能的工具。这意味着，在有些情况下，这些用户会在他们的非专有操作系统上运行专有应用或代码。最终，这两种类型的用户都喜欢使用 Linux 所提供的非专有解决方案。但是，我们这样做的原因往往会有所不同。有人认为那些不支持自由软件的人是无知的。我不同意这种看法，我认为它是实用方便性的问题。那些喜欢实用方便性的用户根本不关心他们软件的政治问题。实用方便性当你问起绝大多数的人为什么使用他们现在的操作系统，回答通常都集中于实用方便性。方便性可能体现在“它是我一直使用的系统”，乃至于“它运行了我需要的软件”。 其他人可能进一步解释说，软件对他们使用操作系统的偏好影响不大，而是对操作系统的熟悉程度的问题，最后，还有一些特殊的“商业考虑”或硬件兼容性等问题也导致我们使用这个操作系统而不是另一个。这可能会让你们中许多人很惊讶，不过如今我运行桌面 Linux 最大的一个原因是由于我熟悉它。即使我能为别人提供 Windows 和 OS X 的支持，实际上我使用这些操作系统时感觉相当沮丧，因为它们根本就不是我习惯的用法。也因此我对那些 Linux 新手表示同情，因为我太懂得踏入陌生的领域是怎样的让人恼火了。我的观点是这样的 —— 熟悉具有价值，而且熟悉加强了实用方便性。现在，如果我们把它和一个自由软件倡导者的需求来比较，你会发现这种人都愿意学习新的甚至更具挑战性的东西，以避免使用非自由软件。对这种用户，我最赞赏的地方，就是他们坚定的采取少数人选择的道路来坚持他们的原则，在我看来，这是十分值得赞赏的。自由的价值我不羡慕那些自由软件倡导者的一个地方，就是根据 自由软件基金会 Free Software Foundation 规定的标准，为实现其自由，他们要始终使用 Linux 发行版和硬件而付出的额外工作。这意味着 Linux 内核需要摆脱专有的驱动支持，而且硬件不需要任何专有代码。当然不是不可能的，但确实很难。一个自由软件倡导者可以达到的最好的情况是硬件是“自由兼容”的。有些供应商，可以满足这一需求，但大多提供的硬件依赖于 Linux 兼容的专有固件。实用主义用户对自由软件倡导者来说是个搅局者。那么这一切意味着的是，倡导者必须比实用主义的 Linux 爱好者，更加警惕。这本身并不一定是坏事，但如果是打算跳入自由软件的阵营那就要考虑下了。比较而言，实用主义的用户可以不假思索地使用与 Linux 兼容的任何软件或硬件。我不知道你是怎么想的，但在我眼中这样更轻松一点。定义自由软件这一部分可能会让一部分人不高兴，因为我不相信自由软件只有一种。从我的立场，我认为真正的自由是能够在一个特定情况下在所有可用的数据里，用最适合这个人生活方式的方法来解决。对我来说，我更喜欢使用能满足我所有需求的 Linux 桌面，这包括使用非专有软件和专有软件。尽管有人认为专有软件限制了我的个人自由，但我必须反驳这一点，因为我有优先使用它的自由，即选择的自由。或许，这也就是为什么我更认同 开源软件 Open Sour…

开源的巨大胜利，印度强制要求其政府使用开源软件
type: item
date: 2015-03-31T23:37:00+08:00
description: 印度政府做了一项重大政策改变，它宣布其政府的所有软件服务和应用都将强制采用开源软件。印度政府说，这是他们的数字印度计划的一部分，所有的电子政务项目都将采用自由和开源软件（FOSS）。据一份来自印度电子和信息技术部（DeitY）的申明说：“印度政府应当努力在各个政府部门所实施的电子政务系统中采用自由和开源软件，（对开源软件的采用）要优先于闭源软件。” 印度政府说，这一举措将确保透明度、可靠性和效率。而在去年11月，印度电子和信息技术部部长说，“只要有可能”就优先采用开源软件，仅在开源软件不能满足功能需求时才选择闭源软件。该申明补充道：“政府部门应确保遵循这一要求，并通过在软件能力、战略控制、可伸缩性、软件生命周期成本和支持需求等方面对开源软件和闭源软件做比较而决定。”美国、几个欧洲国家和英国等一些国家都把开源软件作为优先选择。此外， 印度的喀拉拉邦政府据闻已经使用开源软件很长一段时间了。已经上线的印度政府总门户网站 MyGov.in 完全是通过开源软件所开发的。这件事被认为是开源运动的一大胜利，其根本原因在于开源技术能够极大地降低成本。印度是世界上增长最快的国家之一，其在信息时代前沿的发展上具有巨大潜力。随着这个政策的改变，开源软件可能成为印度技术革命的驱动力。