2016年11月

developer using open source

开源每天都会达到新的高度。但是一个新的研究表明超过 98% 的开发者在工作中使用开源工具。

Git 仓库管理软件 GitLab 进行了一项调查披露了一些关于开源接受度的有趣事实。针对开发人员群体的调查表明 98% 的开发者更喜欢在工作中使用开源,91% 选择在工作和个人项目中选择使用相同的开发工具。此外,92% 的人认为分布式版本控制系统(Git 仓库)在工作中很重要。

在所有的偏好编程语言中,JavaScript 占了 51% 的受访者比例。它后面是 Python、PHP、Java、Swift 和Objective-C。86% 的开发者认为安全是代码的主要判断标准。

GitLab 首席执行官兼联合创始人 Sid Sijbrandij 在一次声明中表示:“尽管过程驱动的开发技术在过去已经取得了成功,但开发人员正在寻找一种更自然的软件开发革新以促进项目生命周期内的协作和信息共享。”

这份报告来自 GitLab 在 7 月 6 日和 27 日之间对使用其存储库平台的 362 家初创企业和企业的 CTO、开发人员和 DevOps 专业人士的调查。


via: http://opensourceforu.com/2016/11/98-percent-developers-use-open-source-at-work/

作者:JAGMEET SINGH 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过几个点击即可在 “AWS 快速起步”和“Azure 市场”上高效搭建产品级 Docker 数据中心。

通过 AWS 快速起步的 CloudFormation 模板和在 Azure 市场上的预编译模板来部署 Docker 数据中心使得比以往在公有云基础设施下的部署企业级的 CaaS Docker 环境更加容易。

Docker 数据中心 CaaS 平台为各种规模的企业的敏捷应用部署提供了容器和集群的编排和管理,使之更简单、安全和可伸缩。使用新为 Docker 数据中心预编译的云模板,开发者和 IT 运维人员可以无缝的把容器化的应用迁移到亚马逊 EC2 或者微软的 Azure 环境而无需修改任何代码。现在,企业可以快速实现更高的计算和运营效率,可以通过短短几步操作实现支持 Docker 的容器管理和编排。

什么是 Docker 数据中心?

Docker 数据中心包括了 Docker 通用控制面板 Docker Universal Control Plane (UCP), Docker 可信注册库 Docker Trusted Registry (UTR)和 商用版 Docker 引擎 CS Docker Engine ,并带有与客户的应用服务等级协议相匹配的商业支持服务。

  • Docker 通用控制面板(UCP),一种企业级的集群管理方案,帮助客户通过单个管理面板管理整个集群
  • Docker 可信注册库(DTR), 一种镜像存储管理方案,帮助客户安全存储和管理 Docker 镜像
  • 商用版的 Docker 引擎

在 AWS 上快速布置 Docker 数据中心

秉承 Docker 与 AWS 最佳实践,参照 AWS 快速起步教程来,你可以在 AWS 云上快速部署 Docker 容器。Docker 数据中心快速起步基于模块化和可定制的 CloudFormation 模板,客户可以在其之上增加额外功能或者为自己的 Docker 部署修改模板。

架构

AWS Cloudformation 的安装过程始于创建 AWS 资源,这些 AWS 需要的资源包括:VPC、安全组、公有与私有子网、因特网网关、NAT 网关与 S3 bucket。

然后,AWS Cloudformation 启动第一个 UCP 控制器实例,紧接着,安装 Docker 引擎和 UCP 容器。它把第一个 UCP 控制器创建的根证书备份到 S3。一旦第一个 UCP 控制器成功运行,其他 UCP 控制器、UCP 集群节点和第一个 DTR 复制的进程就会被触发。和第一个 UCP 控制器节点类似,其他所有节点创建进程也都由商用版 Docker 引擎开始,然后安装并运行 UCP 和 DTR 容器以加入集群。两个弹性负载均衡器(ELB),一个分配给 UCP,另外一个为 DTR 服务,它们启动并自动完成配置来在两个可用区(AZ)之间提供弹性负载均衡。

除这些之外,如有需要,UCP 控制器和节点在 ASG 中启动并提供扩展功能。这种架构确保 UCP 和 DTR 两者都部署在两个 AZ 上以增强弹性与高可靠性。在公有或者私有 HostedZone 上,Route53 用来动态注册或者配置 UCP 和 DTR。

快速起步模板的核心功能如下:

  • 创建 VPC、不同 AZ 上的私有和公有子网、ELB、NAT 网关、因特网网关、自动伸缩组,它们全部基于 AWS 最佳实践
  • 为 DDC 创建一个 S3 bucket,其用于证书备份和 DTR 映像存储(DTR 需要额外配置)
  • 在客户的 VPC 范畴,跨多 AZ 部署 3 个 UCP 控制器
  • 创建预配置正常检测的 UCP ELB
  • 创建一个 DNS 记录并关联到 UCP ELB
  • 创建可伸缩的 UCP 节点集群
  • 在 VPC 范畴内,跨多 AZ 创建 3 个 DTR 副本
  • 创建一个预配置正常检测的 DTR
  • 创建一个 DNS 记录,并关联到 DTR ELB

在 AWS 使用 Docker 数据中心

  1. 登录 Docker Store 获取 30 天免费试用或者联系销售
  2. 确认之后,看到提示“Launch Stack”后,客户会被重定向到 AWS Cloudformation 入口
  3. 确认启动 Docker 的 AWS 区域
  4. 提供启动参数
  5. 确认并启动
  6. 启动完成之后,点击输出标签可以看到 UCP/DTR 的 URL、缺省用户名、密码和 S3 bucket 的名称

在 Azure 使用 Azure 市场的预编译模板部署

在 Azure 市场上,Docker 数据中心是一个预先编译的模板,客户可以在 Azure 横跨全球的数据中心即起即用。客户可以根据自己需求从 Azure 提供的各种 VM 中选择适合自己的 VM 部署 Docker 数据中心。

架构

Azure 部署过程始于输入一些基本用户信息,如 ssh 登录的管理员用户名(系统级管理员)和资源组名称。你可以把资源组理解为一组有生命周期和部署边界的资源集合。你可以在这个链接了解更多关于资源组的信息:<http://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/> 。

下一步,输入集群详细信息,包括:UCP 控制器 VM 大小、控制器个数(缺省为 3 个)、UCP 节点 VM 大小、UCP 节点个数(缺省 1,最大值为 10)、DTR 节点 VM 大小、DTR 节点个数、虚拟网络名和地址(例如:10.0.0.1/19)。关于网络,客户可以配置 2 个子网:第一个子网分配给 UCP 控制器 ,第二个分配给 DTC 和 UCP 节点。

最后,点击 OK 完成部署。对于小集群,服务开通需要大约 15-19 分钟,大集群更久些。

如何在 Azure 部署

  1. 注册 Docker 数据中心 30 天试用许可或者联系销售
  2. 跳转到微软 Azure 市场的 Docker 数据中心
  3. 查看部署文档

通过注册获取 Docker 数据中心许可证开始,然后你就能够通过 AWS 或者 Azure 模板搭建自己的数据中心。

了解有关 Docker 的更多信息:


via: https://blog.docker.com/2016/06/docker-datacenter-aws-azure-cloud/

作者:Trisha McCanna 译者:firstadream 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在我的第一篇关于 开源项目部门 program office 的系列文章中,我深入剖析了什么是开源项目部门,为什么你的公司需要一个开源项目部门。接着我又说到了谷歌是如何创建一种新的开源项目部门的。而这篇文章,我将阐述拥有一个开源项目部门的好处。

乍一看,非软件开发公司会更加热情的去拥抱开源项目部门的一个重要原因是他们并没有什么损失。毕竟,他们并不需要依靠这些软件产品来获得收益。比如,Facebook 可以很轻易的释放出一个 “分布式键值数据存储” 作为开源项目,是因为他们并没有售卖一个叫做 “企业级键值数据存储” 的产品。这回答了关于风险的问题,但是并没有回答他们如何通过向开源生态共献代码而获益的问题。让我们逐个来推测和探讨其中可能的原因。你会发现开源项目供应商的许多动机都是相同的,但是也有些许不同。

招聘

招聘可能是一个将开源项目部门推销给上层管理部门的最容易方法。向他们展示与招聘相关的成本,以及投资回报率,然后解释如何与天才工程师发展关系,从而与那些对这些项目感兴趣并且十分乐意在其中工作的天才开发者们建立联系。不需要我多说了,你懂的!

技术影响

曾几何时,那些没有专门从事软件销售的公司是难以直接对他们软件供应商的开发周期施加影响力的,尤其当他们并不是一个大客户时。开源完全改变了这一点,它将用户与供应商放在了一个更公平的竞争环境中。随着开源开发的兴起,任何人,假如他们愿意投入时间和资源的话,都可以将技术推向一个选定的方向。但是这些公司发现,虽然将投资用于开发上会带来丰硕的成果,但是总体战略的努力却更加有效——对比一下 bug 的修复和软件的构建——大多数公司都将 bug 的修复推给上游的开源项目,但是一些公司开始认识到通过更深层次的回报承诺和更快的功能开发来协调持久的工作,将会更有利于业务。通过开源项目部门模式,公司的职员能够从开源社区中准确嗅出战略重心,然后投入开发资源。

对于快速增长的公司,如 Google 和 Facebook,其对现有的开源项目提供的领导力仍然不足以满足业务的膨胀。面对激烈的增长和建立超大规模系统所带来的挑战,许多大型企业开始构建仅供内部使用的高度定制的软件栈。除非他们能说服别人在一些基础设施项目上达成合作。因此,虽然他们保持在诸如 Linux 内核,Apache 和其他现有项目领域的投资,他们也开始推出自己的大型项目。Facebook 发布了 Cassandra,Twitter 创造了 Mesos,并且甚至谷歌也创建了 Kubernetes 项目。这些项目已成为行业创新的主要平台,证实了该举措是相关公司引人注目的成功。(请注意,Facebook 在它需要创造一个新软件项目来解决更大规模的问题之后,已经在内部停止使用 Cassandra 了,但是,这时 Cassandra 已经变得流行,而 DataStax 公司接过了开发任务)。所有这些项目已经促使了开发商、相关的项目、以及最终用户构成的整个生态加速增长和发展。

没有与公司战略举措取得一致的开源项目部门不可能成功的。不这样做的话,这些公司依然会试图单独地解决这些问题,而且更慢。不仅拥有这些项目可以帮助内部解决业务问题,它们也帮助这些公司逐渐成为行业巨头。当然,谷歌成为行业巨头好多年了,但是 Kubernetes 的发展确保了软件的质量,并且在容器技术未来的发展方向上有着直接的话语权,并且远超之前就有的话语权。这些公司目前还是闻名于他们超大规模的基础设施和硅谷的中坚份子。鲜为人知,但是更为重要的是它们与技术生产人员的亲密度。开源项目部门凭借技术建议和与有影响力的开发者的关系,再加上在社区治理和人员管理方面深厚的专业知识来引领这些工作,并最大限度地发挥其影响力,

市场营销能力

与技术的影响齐头并进的是每个公司谈论他们在开源方面的努力。通过传播这些与项目和社区有关的消息,一个开源项目部门能够通过有针对性的营销活动来提供最大的影响。营销在开放源码领域一直是一个肮脏的词汇,因为每个人都有一个由企业营销造成的糟糕的经历。在开源社区中,营销呈现出一种与传统方法截然不同的形式,它会更注重于我们的社区已经在战略方向上做了什么。因此,一个开源项目部门不可能去宣传一些根本还没有发布任何代码的项目,但是他们会讨论他们创造什么软件和参与了其他什么举措。基本上,不会有“雾件(vaporware)”。

想想谷歌的开源项目部门作出的第一份工作。他们不只是简单的贡献代码给 Linux 内核或其他项目,他们更多的是谈论它,并经常在开源会议主题演讲。他们不仅仅是把钱给写开源代码的代码的学生,他们还创建了一个全球计划——“Google Summer of Code”,现在已经成为一种开源发展的文化试金石。这些市场营销的作用在 Kubernetes 开发完成之前就奠定了谷歌在开源世界巨头的地位。最终使得,谷歌在创建 GPLv3 授权协议期间拥有重要影响力,并且在科技活动中公司的发言人和开源项目部门的代表人成为了主要人物。开源项目部门是协调这些工作的最好的实体,并可以为母公司提供真正的价值。

改善内部流程

改善内部流程听起来不像一个大好处,但克服混乱的内部流程对于每一个开源项目部门都是一个挑战,不论是对软件供应商还是公司内的部门。而软件供应商必须确保他们的流程不与他们发布的产品重叠(例如,不小心开源了他们的商业售卖软件),用户更关心的是侵犯了知识产权(IP)法:专利、版权和商标。没有人想只是因为释放软件而被起诉。没有一个活跃的开源项目部门去管理和协调这些许可和其他法律问题的话,大公司在开源流程和管理上会面临着巨大的困难。为什么这个很重要呢?如果不同的团队释放的软件是在不兼容的许可证下,那么这不仅是一个坑爹的尴尬,它还将对实现最基本的目标改良协作产生巨大的障碍。

考虑到还有许多这样的公司仍在飞快的增长,如果无法建立基本流程规则的话,将可以预见到它们将会遇到阻力。我见过一个罗列着批准、未经批准的许可证的巨大的电子表格,以及指导如何(或如何不)创建开源社区而遵守法律限制。关键是当开发者需要做出决定时要有一个可以依据的东西,并且每次当开发人员想要为一个开源社区贡献代码时,可以不产生大量的法律开销,和效率低下的知识产权检查。

有一个活跃的开放源码项目部门,负责维护许可规则和源的贡献,以及建立培训项目工程师,有助于避免潜在的法律缺陷和昂贵的诉讼。毕竟,良好的开源项目合作可以减少由于某人没有看许可证而导致公司赔钱这样的事件。好消息是,公司已经可以较少的担心关于专有的知识产权与软件供应商冲突的事。坏消息是,它们的法律问题不够复杂,尤其是当他们需要直接面对软件供应商的阻力时。

你的组织是如何受益于拥有一个开源项目部门的?可以在评论中与我们分享。

本文作者 John Mark Walker 是 Dell EMC 的产品管理总监,负责管理 ViPR 控制器产品及 CoprHD 开源社区。他领导过包括 ManageIQ 在内的许多开源社区。


via: https://opensource.com/business/16/9/4-big-ways-companies-benefit-having-open-source-program-offices

作者:John Mark Walker 译者:chao-zhi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在这篇文章中,我们将会讲述什么是 TCP 封装器 TCP wrappers 以及如何在一台 Linux 服务器上配置他们来限制网络服务的权限。在开始之前,我们必须澄清 TCP 封装器并不能消除对于正确配置防火墙的需要。

就这一点而言,你可以把这个工具看作是一个基于主机的访问控制列表,而且并不能作为你的系统的终极安全措施。通过使用一个防火墙和 TCP 封装器,而不是只偏爱其中的一个,你将会确保你的服务不会被出现单点故障。

正确理解 hosts.allow 和 hosts.deny 文件

当一个网络请求到达你的主机的时候,TCP 封装器会使用 hosts.allowhosts.deny (按照这样的顺序)来决定客户端是否应该被允许使用一个提供的服务。.

在默认情况下,这些文件内容是空的,或者被注释掉,或者根本不存在。所以,任何请求都会被允许通过 TCP 过滤器而且你的系统被置于依靠防火墙来提供所有的保护。因为这并不是我们想要的。由于在一开始我们就介绍过的原因,清确保下面两个文件都存在:

# ls -l /etc/hosts.allow /etc/hosts.deny

两个文件的编写语法规则是一样的:

<services> : <clients> [: <option1> : <option2> : ...]

在文件中,

  1. services 指当前规则对应的服务,是一个逗号分割的列表。
  2. clients 指被规则影响的主机名或者 IP 地址,逗号分割的。下面的通配符也可以接受:

    1. ALL 表示所有事物,应用于clientsservices
    2. LOCAL 表示匹配在正式域名中没有完全限定主机名(FQDN)的机器,例如 localhost
    3. KNOWN 表示主机名,主机地址,或者用户是已知的(即可以通过 DNS 或其它服务解析到)。
    4. UNKNOWNKNOWN 相反。
    5. PARANOID 如果进行反向 DNS 查找彼此返回了不同的地址,那么连接就会被断开(首先根据 IP 去解析主机名,然后根据主机名去获得 IP 地址)。
  3. 最后,一个冒号分割的动作列表表示了当一个规则被触发的时候会采取什么操作。

你应该记住 /etc/hosts.allow 文件中允许一个服务接入的规则要优先于 /etc/hosts.deny 中的规则。另外还有,如果两个规则应用于同一个服务,只有第一个规则会被纳入考虑。

不幸的是,不是所有的网络服务都支持 TCP 过滤器,为了查看一个给定的服务是否支持他们,可以执行以下命令:

# ldd /path/to/binary | grep libwrap

如果以上命令执行以后得到了以下结果,那么它就可以支持 TCP 过滤器,sshdvsftpd 作为例子,输出如下所示。

Find Supported Services in TCP Wrapper

查找 TCP 过滤器支持的服务

如何使用 TCP 过滤器来限制服务的权限

当你编辑 /etc/hosts.allow/etc/hosts.deny 的时候,确保你在最后一个非空行后面通过回车键来添加一个新的行。

为了使得 SSH 和 FTP 服务只允许 localhost192.168.0.102 并且拒绝所有其他用户,在 /etc/hosts.deny 添加如下内容:

sshd,vsftpd : ALL
ALL : ALL

而且在 /etc/hosts.allow 文件中添加如下内容:

sshd,vsftpd : 192.168.0.102,LOCAL

这些更改会立刻生效并且不需要重新启动。

在下图中你会看到,在最后一行中删掉 LOCAL 后,FTP 服务器会对于 localhost 不可用。在我们添加了通配符以后,服务又变得可用了。

确认 FTP 权限

确认 FTP 权限

为了允许所有服务对于主机名中含有 example.com 都可用,在 hosts.allow 中添加如下一行:

ALL : .example.com

而为了禁止 10.0.1.0/24 的机器访问 vsftpd 服务,在 hosts.deny 文件中添加如下一行:

vsftpd : 10.0.1.

在最后的两个例子中,注意到客户端列表每行开头和结尾的。这是用来表示 “所有名字或者 IP 中含有那个字符串的主机或客户端”

这篇文章对你有用吗?你有什么问题或者评论吗?请你尽情在下面留言交流。


via: http://www.tecmint.com/secure-linux-tcp-wrappers-hosts-allow-deny-restrict-access/

作者:Gabriel Cánepa 译者:LinuxBars 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当你有重要的敏感数据的时候,给你的文件和目录额外加一层保护是至关重要的,特别是当你需要通过网络与他人传输数据的时候。

由于这个原因,我在寻找一个可疑在 Linux 上加密及解密文件和目录的实用程序,幸运的是我找到了一个用 tar(Linux 的一个压缩打包工具)和 OpenSSL 来解决的方案。借助这两个工具,你真的可以毫不费力地创建和加密 tar 归档文件。

在这篇文章中,我们将了解如何使用 OpenSSL 创建和加密 tar 或 gz(gzip,另一种压缩文件)归档文件:

牢记使用 OpenSSL 的常规方式是:

# openssl command command-options arguments

在 Linux 中加密文件

要加密当前工作目录的内容(根据文件的大小,这可能需要一点时间):

# tar -czf - * | openssl enc -e -aes256 -out secured.tar.gz

上述命令的解释:

  1. enc - openssl 命令使用加密进行编码
  2. -e – 用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出
  3. -aes256 – 加密用的算法
  4. -out – 用于指定输出文件名的 enc 命令选项,这里文件名是 secured.tar.gz

在 Linux 中解密文件

要解密上述 tar 归档内容,使用以下命令。

# openssl enc -d -aes256 -in secured.tar.gz | tar xz -C test

上述命令的解释:

  1. -d – 用于解密文件
  2. -C – 提取内容到 test 子目录

下图展示了加解密过程,以及当你尝试执行以下操作时会发生什么:

  1. 以传统方式提取 tar 包的内容
  2. 使用了错误的密码的时候
  3. 当你输入正确的密码的时候

在 Linux 中加密和解密 Tar 归档文件

在 Linux 中加密和解密 Tar 归档文件

当你在本地网络或因特网工作的时候,你可以随时通过加密来保护你和他人共享的重要文本或文件,这有助于降低将其暴露给恶意攻击者的风险。

我们研究了一种使用 OpenSSL(一个 openssl 命令行工具)加密 tar 包的简单技术,你可以参考它的 手册页 man page 来获取更多信息和有用的命令。


via: http://www.tecmint.com/encrypt-decrypt-files-tar-openssl-linux/

作者:Gabriel Cánepa 译者:OneNewLife 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我开源事业的第一笔,是我在 2001 年作为一名兼职系统管理员,为大学工作的时候。成为了那个以教学为目的,不仅仅在大学中,还在学术界的其他领域建立商业案例研究的小组的一份子。

随着团队的发展,渐渐地开始需要一个由文件服务、intranet 应用,域登录等功能构建而成的健壮的局域网。 我们的 IT 基础设施主要由跑着 Windows 98 的计算机组成,这些计算机对于大学的 IT 实验室来说已经太老了,就重新分配给了我们部门。

初探 Linux

一天,作为大学IT采购计划的一部分,我们部门收到了一台 IBM 服务器。 我们计划将其用作 Internet 网关,域控制站,文件服务器和备份服务器,以及 intranet 应用程序主机。

拆封后,我们注意到它附带了红帽 Linux 的 CD。 我们的 22 人团队(包括我)对 Linux 一无所知。 经过几天的研究,我找到了一位朋友的朋友,一位以 Linux RTOS (Linux 的实时操作系统领域)编程为生的人,求助他如何安装。

光看着那朋友用 CD 驱动器载入第一张安装 CD 并进入 Anaconda 安装系统,我的头都晕了。 大约一个小时,我们完成了基本的安装,但仍然没有可用的 internet 连接。

又花了一个小时的折腾才使我们连接到互联网,但仍没有域登录或 Internet 网关功能。 经过一个周末的折腾,我们可以让我们的 Windows 98 机器作为 Linux PC 的代理,终于构出了一个正常工作的共享互联环境。 但域登录还需要一段时间。

我们用龟速的电话调制解调器下载了 Samba,并手动配置它作为域控制站。文件服务也通过 NFS Kernel Server 开启了,随后为 Windows 98 的网络邻居创建了用户目录并进行了必要的调整和配置。

这个设置完美运行了一段时间,直到最终我们决定开始使用 Intranet 应用管理时间表和一些别的东西。 这个时候,我已经离开了该组织,并把大部分系统管理员的东西交给了接替我的人。

再遇 Linux

2004 年,我又重新装回了 Linux。我的妻子经营的一份独立员工安置业务,使用来自 Monster.com 等服务的数据来打通客户与求职者的交流渠道。

作为我们两人中的计算机好点的那个,在计算机和互联网出故障的时候,维修就成了我的分内之事。我们还需要用许多工具尝试,从堆积如山的简历中筛选出她每天必须看的。

Windows BSoD(蓝屏) 早已司空见惯,但只要我们的付费数据是安全的,那就还算可以容忍。为此我将不得不每周花几个小时去做备份。

一天,我们的电脑中了毒,并且通过简单的方法无法清除。我们并不了解磁盘上的数据发生了些什么。当磁盘彻底挂掉后,我们插入了一周前的辅助备份磁盘,但是一周后它也挂了。我们的第二个备份直接拒绝启动。是时候寻求专业帮助了,所以我们把电脑送到一家靠谱的维修店。两天以后,我们被告知一些恶意软件或病毒已经将某些种类的文件擦除殆尽,其中包括我们的付费数据。

这是对我妻子的商业计划的一个巨大的打击,同时意味着丢失合同并耽误了账单。我曾短期出国工作,并在台湾的 Computex 2004 购买了我的第一台笔记本电脑。 预装的是 Windows XP,但我还是想换成 Linux。 我知道 Linux 已经为桌面端做好了准备,Mandrake Linux (曼德拉草) 是一个很不错的选择。 我第一次安装就很顺利。所有工作都执行的非常漂亮。我使用 OpenOffice 来满足我写作,演示文稿和电子表格的需求。

我们为我们的计算机买了新的硬盘驱动器,并为其安装了 Mandrake Linux。用 OpenOffice 替换了 Microsoft Office。 我们依靠 Web 邮件来满足邮件需求,并在 2004 年的 11 月迎来了 Mozilla Firefox。我的妻子马上从中看到了好处,因为没有崩溃或病毒/恶意软件感染!更重要的是,我们告别了困扰 Windows 98 和 XP 的频繁崩溃问题。 她一直使用这个发行版。

而我,开始尝试其他的发行版。 我爱上了 distro-hopping (LCTT 译注:指在不同版本的 Linux 发行版之间频繁切换的 Linux 用户)和第一时间尝试新发行版的感觉。我也经常会在 Apache 和 NGINX 上尝试和测试 Web 应用程序,如 Drupal、Joomla 和 WordPress。现在我们 2006 年出生的儿子,在 Linux 下成长。 也对 Tux Paint,Gcompris 和 SMPlayer 非常满意。


via: https://opensource.com/life/16/3/my-linux-story-soumya-sarkar

作者:Soumya Sarkar 译者:martin2011qi 校对:wxy