分类 观点 下的文章

最近,The Register 的 Liam Proven 写了一篇关于 最恼人的桌面 Linux 发行版 的文章。他启发我写了这篇文章。

Proven 指出,Distrowatch 目前列出了多达 270 个 Linux 发行版。当然,没有人能够都一一了解所有的这些发行版。但是,甚至在 GNOME 和 KDE 的界面大辩论之前,从 Bash 和 Zsh 之争开始,我就一直在报道 Linux 桌面,并且曾经是一本现在已经停刊的名为《Linux 桌面》杂志的主编,我想我比任何其他用过 Windows PC 之外的计算机的人使用过更多的桌面。简而言之,我超爱 Linux 桌面

许多 Linux 桌面发行版都很棒。多年来,我一直是 Linux Mint 的忠实粉丝。我也很喜欢其它桌面发行版:FedoraopenSUSEUbuntuMX Linux,排名不分先后。但是你知道吗?这就是问题。

我们有很多优秀的 Linux 桌面发行版,但这意味着它们中没有一个能获得足够的市场份额,从而在 整个市场 上产生任何真正的影响。

自从人们开始谈论何时 Linux 能在桌面上击败 Windows 以来,情况一直如此。尽管我们可能梦想着一个真正的 Linux 桌面年到来,但它从未到来。正如 Forrester 高级分析师 Andrew Hewitt 最近指出的那样,“总的来说,只有 1% 的员工 报告说他们用于工作的主要笔记本电脑使用了 Linux。而 60%的人仍在使用 Windows……。Linux 不太可能超越 Windows 成为主要操作系统"。

他没有说错。

这并不是说 Linux 不能成为一个成功的终端用户环境。事实上,它是,你可以说 Linux 是最成功的终端用户操作系统,而不是 Windows。这是因为现在有 超过 30 亿部安卓手机,而安卓只是一个专门针对智能手机的 Linux 发行版。

它并不是唯一隐藏在众目睽睽之下的 Linux。你会在每所学校、在我的旅行袋中发现 Chromebook,它无处不在。Chrome OS 只是 在 Linux 基础上 将 Chrome 浏览器和界面进行了改造。

把这一切加起来,你可以直截了当地说,Linux 实际上早就是最受欢迎的终端用户操作系统了。

但这不是 Linux 桌面爱好者想要的。他们希望 Windows 在 Linux 重压之下被压垮,跪地求饶。

对不起。这不可能发生。Linus Torvalds 已经告诉我们为什么我们永远不会在每台 PC 上看到一个经典的 Linux 桌面:碎片化

想一想吧。除了 200 多个发行版之外,还有 21 种不同的桌面界面、六种以上的不同的主要软件安装方式,如 Debian 软件包管理系统(DPKG)、红帽软件包管理器(RPM)、PacmanZypper,以及其他的方式。然后还有所有较新的容器化安装程序的方法,包括 FlatpakSnapAppImage

我几乎不能把它们全都搞清楚,而这甚至还是我工作的一部分!你怎么能 指望普通用户来理解这一切 呢?不可能。

Canonical红帽SUSE 这样主要的 Linux 发行商,没有一个 真正关心 Linux 桌面。当然,他们有 Linux 桌面发行版。他们也是 Linux 桌面的主要影响者。但他们的收入来自服务器、容器、云和物联网(IoT)。桌面?拜托。我们应该 庆幸 他们在桌面上花费了那么多资源。

现在,说了这么多,我 不想 让你得到这样的印象:我不认为传统的 Linux 桌面很重要。事实上,我认为它很关键

你看,微软正在放弃传统的基于 PC 的桌面。哦,Windows 并没有消失,但它正在转移。在其对未来的预测中,微软认为基于 Azure 的 桌面即服务(DaaS) 是其未来。当然,Windows 用户仍然会在他们的桌子上看到一个看起来像 PC 的东西,但实际上它只是一个连接到 Windows 365 Cloud PC 的智能终端。真正的计算智能将在云中。

这意味着,真正的桌面操作系统的未来将掌握在拥有 macOS 的苹果公司和拥有 Linux 的我们手中。作为一个记得从中央控制的大型机和小型机向个人拥有的 PC 过渡的人,我不想回到一个所有权力属于微软或其他公司的世界。

Linux 桌面将永远不会像 Windows 曾经那样庞大。在 DaaS 的兴起和桌面向智能手机的沦陷之间,它不可能做到。但是,它可能会 默认成为最受欢迎的、真正的传统桌面

那么 2028 年将是 Linux 桌面年吗?

你怎么看?


via: https://www.theregister.com/2022/06/08/linux_desktop_blues/

作者:Steven J. Vaughan-Nichols 选题:wxy 译者:wxy 校对:wxy

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

Beyond 计划连接起未来科技行业的人才和开源文化。

 title=

那时,我还是一个大学生,我不明白人们为什么那么吹捧开源软件。我也使用 Linux 和开源软件,但是我不明白开源的运作模式,不知道如何参加一个开源项目,也不知道这对我未来的职业有什么好处。我的开发经验主要是家庭作业和学位需要的一个大型期末项目。

所以,当我开始踏足科技行业时,我发现我还有很多知识需要学习。我需要了解如何加入一个既定的、可能很大并且分散在不同地方的团队,为一个正在进行中的项目工作。我还要学会正确的沟通以保证我付出的努力不白费。

在这方面,我并不特别。我只是众多毕业生中的一员。

开源让毕业生的起点更高

作为一个工程师,一个管理者,从那时起我开始帮助刚入行的工程师。我发现,有开源经验的毕业生比没有开源经验的毕业生能更快的入门。

通过将开源方法纳入学术研究,学生们可以获得相关的行业经验,学会利用他们自己的知识,并建立一个陈述观点和分享知识的平台。参与开源项目可以对学生的技术知识和经验产生积极影响。这可以帮助他们更好的规划自己的职业生涯。

开源在科技行业的价值是公认的,它塑造了全球软件公司的文化。参与开源项目并采用 开放组织文化 正在成为行业普遍现象。公司寻求知道如何在开源领域工作并培养其文化的思想新颖、才华横溢的员工。因此,科技行业必须推动学术界将开源文化作为学习科技研究的基本方法之一。

商业之上是开源文化

当我遇到红帽的高级软件工程师 Liora Milbaum 时,我发现,我们对将开源文化和规则引入学术界有着共同的兴趣。Liora 之前创立了 DevOps Loft, 在其中,她与有兴趣进入这个行业的人们分享了 DevOps 实践,并希望发起一个类似的项目,教授大学生开源。我们决定启动 Beyond 计划,将科技行业拥抱开源精神的人才与红帽的实践联系起来。

我们在 Tel Aviv-Yafo 技术学院 开始了 Beyond 计划,在那里,我们受到了信息系统学院的热烈欢迎。我们从介绍 DevOps 技术栈的 “DevOps 入门” 开始。我们开始时最大的挑战是怎么讲明白开源是什么。答案似乎很简单:实践出真理。我们不想给学生们讲授什么老套的学院课程,相反,我们想让学生接触到行业标准。

我们创建了一个包含常见的开源项目和工具的教学大纲来教授 DevOps 技术栈。该课程由工程师教授的讲座和实践组成。学生们被分成小组,每组都由一名工程师指导和支持。他们练习团队合作,分享知识(在团队内外),并有效的协作。

在我们为计算机科学学院的通讯准备的高级课程 “开源开发的基础” 中,我们遇到了另外的困难。当我们的课程开始两周以后,随着新冠疫情在全球的流行,我们完全靠远程沟通。我们通过与学生一起使用我们在红帽日常工作中使用的相同远程协作工具解决了这个问题。我们惊讶于过渡的是如此简单和顺利。

 title=

(Irit Goihman, CC BY-SA 4.0)

成果展示

这两个课程取得了巨大的成功,我们甚至雇佣了我们最优秀的学生之一。我们收到了非常棒的反馈,同学们表示,我们对他们的知识、思维和软技能产生了积极影响。一些学生因为在课程期间的开源贡献而得到了他们第一份技术工作。

其他学术机构对这些课程表达出了极大的兴趣,因此我们将这个项目扩展到了另外一所大学。

很荣幸,在一群优秀工程师的参与下,与 Liora 一起领导这个成功的项目。我们一起助力开源社区的成长。


via: https://opensource.com/article/21/1/open-source-beyond-business

作者:Irit Goihman 选题:lujun9972 译者:duoluoxiaosheng 校对:wxy

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

想象一下,你坐在河边,河岸上如茵绿草,不远处湍急河流;午后的阳光慵懒惬意,使人陷入冥想哲思,不觉开始思考眼前的河流是否真实存在。诚然,几米外确实有河水奔流而下。不过,我们所称为“河流”的存在究竟是什么呢?毕竟,河水奔流不息,一直处于变化之中。似乎,“河流”这个词无法指代任何固定不变的事物。

2009 年,Clojure 的创始人 里奇·希基 Rich Hickey 发表了 一场精彩的演讲,探讨了为什么上文那样的哲学窘境会给面向对象程序的编程范式带来难题。他认为,人们看待计算机程序中的对象与看待河流的逻辑是一样的:我们想象对象是固定不变的,即使对象的许多或者说全部的属性都无时无刻不处于变化之中。所以,这种逻辑并不正确,我们无法区分在不同状态下同一对象实例的不同之处。程序中没有明确的时间的概念。人们只是单纯地用着同一个名字,以期在引用对象时,对象能够处于预期的状态中。这样,我们也就难免会遇到 故障 bug

希基总结道,这一难题的应对办法就是人们应该将世界建模成作用于不可变数据的 进程 process 的集合,而不是可变的对象的集合。换句话说,我们应把每个对象看作一条“河流”,因果相连。总结说来,你应该使用 Clojure 等函数式语言。

作者在远足途中思考面向对象程序设计的本体论问题。

自从希基发表演讲之后,人们对函数式编程语言的兴趣不断提升,主流的面向对象编程语言也大多都采用了函数式编程语言。尽管如此,大多数程序员依旧沿用自己的老一套,继续将对象实例化,不断改变其状态。这些人长此以往,很难做到用不同的视角看待编程。

我曾经想写一篇关于 Simula 的文章,大概会写到我们今天所熟知的面向对象的理念是何时又是如何应用到程序语言之中的。但是,我觉得写当初的 Simula 与如今的面向对象程序设计的 迥然不同之处,会更有趣一些,这我敢打包票。毕竟,我们现在熟知的面向对象程序设计还未完全成型。Simula 有两个主要版本:Simula I 和 Simula 67。Simula 67 为世界带来了 class 类的继承 class hierarchy 以及 虚拟方法 virtual method ;但 Simula I 是一个初稿,它实验了如何能够将数据和进程捆绑起来的其他设想。Simula I 的模型不是希基提出的函数式模型,不过这一模型关注的是随时间展开的 进程,而非有着隐藏状态的对象之间的相互作用。如果 Simula 67 采用了 Simula I 的理念,那么我们如今所知的面向对象程序设计可能会大有不同——这类偶然性启示我们,不要想着现在的程序设计范式会一直占据主导地位。

从 Simula 0 到 Simula 67

Simula 是由两位挪威人 克里斯汀·尼加德 Kristen Nygaard 奥利-约翰·达尔 Ole-Johan Dahl 创建的。

20 世纪 50 年代末,尼加德受雇于 挪威防务科学研究中心 Norwegian Defense Research Establishment (NDRE),该研究中心隶属于挪威军方。在那里,他负责设计 蒙特卡洛模拟方法 Monte Carlo simulations ,用于核反应堆设计与操作研究。最初,那些模拟实验是由人工完成的;后来,实验在 Ferranti Mercury 电脑 [1] 上编入程序运行。尼加德随后发现,将这些模拟实验输入电脑需要一种更有效的方式。

尼加德设计的这种模拟实验就是人们所知的“ 离散事件模型 discrete event model ”,这种模拟记录了一系列事件随着时间改变系统状态的进程。但是问题的关键在于模拟可以从一个事件跳跃到另一个事件中,因为事件是离散的,事件之间的系统不存在任何变化。根据尼加德和达尔在 1966 年发表的一篇关于 Simula 的论文,这种模型被迅速应用于“神经网络、通信系统、交通流量、生产系统、管理系统、社会系统等” [2] 领域的分析。因此,尼加德认为,其他人描述模拟实验时,可能也需要更高层级的模型。于是他开始物色人才,帮助他完成他称之为“ 模拟语言 Simulation Language ”或者“ 蒙特卡洛编译器 Monte Carlo Compiler ”的项目 [3]

达尔当时也受雇于挪威防务科学研究中心,专攻语言设计,此时也加入了尼加德的项目,扮演“沃兹尼亚克”的角色(LCTT 译注:指苹果公司联合创始人斯蒂夫·盖瑞·沃兹尼亚克)。在接下来一年左右的时间,尼加德和达尔携手开发了 Simula 0 语言。 [4] 这一语言的早期版本仅仅是在 ALGOL 60 基础上进行的较小拓展,当时也只是打算将其用作预处理程序而已。当时的语言要比后来的编程语言抽象得多,其基本语言结构是“ 车站 stations ”与“ 乘客 customers ”,这些结构可以用于针对具体某些离散事件网络建立模型。尼加德和达尔给出了一个模拟飞机离港的例子。 [5] 但是尼加德和达尔最后想出了一个更加通用的语言结构,可以同时表示“车站”和“乘客”,也可以为更广泛的模拟建立模型。这是两个主要的概括,它改变了 Simula 作为 ALGOL 专属包的定位,使其转变为通用编程语言。

Simula I 没有“ 车站 stations ”和“ 乘客 customers ”的语言结构,但它可以通过使用“ 进程 process ”再现这些结构。(LCTT 译注:此处使用的“进程”,与当前计算机中用来指代一个已执行程序的实体的概念不同,大致上,你可以将本文中所说的“进程”理解为一种“对象”。)一个进程包含大量数据属性,这些属性与作为进程的 操作规程 的单个行为相联系。你可能会把进程当作是只有单个方法的对象,比如 run() 之类的。不过,这种类比并不全面,因为每个进程的操作规程都可以随时暂停、随时恢复,因为这种操作规程属于 协程 coroutine 的一种。Simula I 程序会将系统建立为一套进程的模型,在概念上这些进程并行运行。实际上,一个时间点上能称为“当前进程”的只有一个进程。但是,一旦某个进程暂停运行,那么下一个进程就会自动接替它的位置。随着模拟的运行,Simula 会保持一个 “ 事件通知 event notices ” 的时间线,跟踪记录每个进程恢复的时间。为了恢复暂停运行的进程,Simula 需要记录多个 调用栈 call stacks 的情况。这就意味着 Simula 无法再作为 ALGOL 的预处理程序了,因为 ALGOL 只有一个 调用栈 call stacks 。于是,尼加德和达尔下定决心,开始编写自己的编译器。

尼加德和达尔在介绍该系统的论文中,借助图示,通过模拟一个可用机器数量有限的工厂,阐明了其用法。 [6] 在该案例中,进程就好比订单:通过寻找可用的机器,订单得以发出;如果没有可用的机器,订单就会搁置;而一旦有机器空出来,订单就会执行下去。有一个订单进程的定义,用来实例化若干种不同的订单实例,不过这些实例并未调用任何方法。该程序的主体仅仅是创建进程,并使其运行。

历史上第一个 Simula I 编译器发布于 1965 年。尼加德和达尔在离开挪威防务科学研究中心之后,就进入了 挪威计算机中心 Norwegian Computer Center 工作,Simula I 也是在这里日渐流行起来的。当时,Simula I 在 UNIVAC 公司的计算机和 Burroughs 公司的 B5500 计算机上均可执行。 [7] 尼加德和达尔两人与一家名为 ASEA 的瑞典公司达成了咨询协议,运用 Simula 模拟加工车间。但是,尼加德和达尔随后就意识到 Simula 也可以写一些和模拟完全不搭边的程序。

奥斯陆大学 University of Oslo 教授 斯坦因·克罗达尔 Stein Krogdahl 曾写过关于 Simula 的发展史,称“真正能够促使新开发的通用语言快速发展的催化剂”就是 一篇题为 《记录处理》 Record Handling 的论文,作者是英国计算机科学家 查尔斯·安东尼·理查德·霍尔 C.A.R. Hoare [8] 假如你现在读霍尔的这篇论文,你就不会怀疑这句话。当人们谈及面向对象语言的发展史时,一定会经常提起霍尔的大名。以下内容摘自霍尔的《记录处理》一文:

该方案设想,在程序执行期间,计算机内部存在任意数量的记录,每条记录都代表着程序员在过去、现在或未来所需的某个对象。程序对现有记录的数量保持动态控制,并可以根据当前任务的要求创建新的记录或删除现有记录。

计算机中的每条记录都必须属于数量有限但互不重合的记录类型中的一类;程序员可以根据需要声明尽可能多的记录类型,并借助标识符为各个类型命名。记录类型的命名可能是普通词汇,比如“牛”、“桌子”以及“房子”,同时,归属于这些类型的记录分别代表一头“牛”、一张“桌子”以及一座“房子”。

霍尔在这片论文中并未提到子类的概念,但是达尔由衷地感谢霍尔,是他引导了两人发现了这一概念。 [9] 尼加德和达尔注意到 Simula I 的进程通常具有相同的元素,所以引入父类来执行共同元素就会非常方便。这也强化了“进程”这一概念本身可以用作父类的可能性,也就是说,并非每种类型都必须用作只有单个操作规程的进程。这就是 Simula 语言迈向通用化的第二次飞跃,此时,Simula 67 真正成为了通用编程语言。正是如此变化让尼加德和达尔短暂地萌生了给 Simula 改名的想法,想让人们意识到 Simula 不仅仅可以用作模拟。 [10] 不过,考虑到 “Simula”这个名字的知名度已经很高了,另取名字恐怕会带来不小的麻烦。

1967 年,尼加德和达尔与 控制数据公司 Control Data 签署协议,着手开发Simula 的新版本:Simula 67。同年六月份的一场会议中,来自控制数据公司、奥斯陆大学以及挪威计算机中心的代表与尼加德和达尔两人会面,意在为这门新语言制定标准与规范。最终,会议发布了 《Simula 67 通用基础语言》,确定了该语言的发展方向。

Simula 67 编译器的开发由若干家供应商负责。 Simula 用户协会 The Association of Simula Users (ASU)也随后成立,并于每年举办年会。不久,Simula 67 的用户就遍及了 23 个国家。 [11]

21 世纪的 Simula 语言

人们至今还记得 Simula,是因为后来那些取代它的编程语言都受到了它的巨大影响。到了今天,你很难找到还在使用 Simula 写程序的人,但是这并不意味着 Simula 已经从这个世界上消失了。得益于 GNU cim,人们在今天依然能够编写和运行 Simula 程序。

cim 编译器遵循 1986 年修订后的 Simula 标准,基本上也就是 Simula 67 版本。你可以用它编写类、子类以及虚拟方法,就像是在使用 Simula 67 一样。所以,用 Python 或 Ruby 轻松写出短短几行面向对象的程序,你照样也可以用 cim 写出来:

! dogs.sim ;
Begin
    Class Dog;
        ! The cim compiler requires virtual procedures to be fully specified ;
        Virtual: Procedure bark Is Procedure bark;;
    Begin
        Procedure bark;
        Begin
            OutText("Woof!");
            OutImage;           ! Outputs a newline ;
        End;
    End;

    Dog Class Chihuahua;        ! Chihuahua is "prefixed" by Dog ;
    Begin
        Procedure bark;
        Begin
            OutText("Yap yap yap yap yap yap");
            OutImage;
        End;
    End;

    Ref (Dog) d;
    d :- new Chihuahua;         ! :- is the reference assignment operator ;
    d.bark;
End;

你可以按照下面代码执行程序的编译与运行:

$ cim dogs.sim
Compiling dogs.sim:
gcc -g -O2 -c dogs.c
gcc -g -O2 -o dogs dogs.o -L/usr/local/lib -lcim
$ ./dogs
Yap yap yap yap yap yap

(你可能会注意到,cim 先将 Simula 语言编译为 C 语言,然后传递给 C 语言编译器。)

这就是 1967 年的面向对象程序设计,除了语法方面的不同,和 2019 年的面向对象程序设计并无本质区别。如果你同意我的这一观点,你也就懂得了为什么人们会认为 Simula 在历史上是那么的重要。

不过,我更想介绍一下 Simula I 的核心概念——进程模型。Simula 67 保留了进程模型,不过只有在使用 Process 类 和 Simulation 块的时候才能调用。

为了表现出进程是如何运行的,我决定模拟下述场景。想象一下,有这么一座住满了村民的村庄,村庄的旁边有条小河边,小河里有很多的鱼。但是,村里的村民却只有一条鱼竿。村民们胃口很大,每隔一个小时就饿了。他们一饿,就会拿着鱼竿去钓鱼。如果一位村民正在等鱼竿,另一位村民自然也用不了。这样一来,村民们就会为了钓鱼排起长长的队伍。假如村民要等五、六分钟才能钓到一条鱼,那么这样等下去,村民们的身体状况就会变得越来越差。再假如,一位村民已经到了骨瘦如柴的地步,最后他可能就会饿死。

这个例子多少有些奇怪,虽然我也不说不出来为什么我脑袋里最先想到的是这样的故事,但是就这样吧。我们把村民们当作 Simula 的各个进程,观察在有着四个村民的村庄里,一天的模拟时间内会发生什么。

完整程序可以通过此处 GitHub Gist 的链接获取。

我把输出结果的最后几行放在了下面。我们来看看一天里最后几个小时发生了什么:

1299.45: 王五饿了,要了鱼竿。
1299.45: 王五正在钓鱼。
1311.39: 王五钓到了一条鱼。
1328.96: 赵六饿了,要了鱼竿。
1328.96: 赵六正在钓鱼。
1331.25: 李四饿了,要了鱼竿。
1340.44: 赵六钓到了一条鱼。
1340.44: 李四饿着肚子等着鱼竿。
1340.44: 李四在等鱼竿的时候饿死了。
1369.21: 王五饿了,要了鱼竿。
1369.21: 王五正在钓鱼。
1379.33: 王五钓到了一条鱼。
1409.59: 赵六饿了,要了鱼竿。
1409.59: 赵六正在钓鱼。
1419.98: 赵六钓到了一条鱼。
1427.53: 王五饿了,要了鱼竿。
1427.53: 王五正在钓鱼。
1437.52: 王五钓到了一条鱼。

可怜的李四最后饿死了,但是他比张三要长寿,因为张三还没到上午 7 点就饿死了。赵六和王五现在一定过得很好,因为需要鱼竿的就只剩下他们两个了。

这里,我要说明,这个程序最重要的部分只是创建了进程(四个村民),并让它们运行下去。各个进程操作对象(鱼竿)的方式与我们今天对对象的操作方式相同。但是程序的主体部分并没有调用任何方法,也没有修改进程的任何属性。进程本身具有内部状态,但是这种内部状态的改变只有进程自身才能做到。

在这个程序中,仍然有一些字段发生了变化,这类程序设计无法直接解决纯函数式编程所能解决的问题。但是正如克罗达尔所注意到的那样,“这一机制引导进行模拟的程序员为底层系统建立模型,生成一系列进程,每个进程表示了系统内的自然事件顺序。” [12] 我们不是主要从名词或行动者(对其他对象做事的对象)的角度来思考正在进行的进程。我们可以将程序的总控制权交予 Simula 的事件通知系统,克罗达尔称其为 “ 时间管理器 time manager ”。因此,尽管我们仍然在适当地改变进程,但是没有任何进程可以假设其他进程的状态。每个进程只能间接地与其他进程进行交互。

这种模式如何用以编写编译器、HTTP 服务器以及其他内容,尚且无法确定。(另外,如果你在 Unity 游戏引擎上编写过游戏,就会发现两者十分相似。)我也承认,尽管我们有了“时间管理器”,但这可能并不完全是希基的意思,他说我们在程序中需要一个明确的时间概念。(我认为,希基想要的类似于 阿达·洛芙莱斯 Ada Lovelace 用于区分一个变量随时间变化产生的不同数值的上标符号。)尽管如此,我们可以发现,面向对象程序设计前期的设计方式与我们今天所习惯的面向对象程序设计并非完全一致,我觉得这一点很有意思。我们可能会理所当然地认为,面向对象程序设计的方式千篇一律,即程序就是对事件的一长串记录:某个对象以特定顺序对其他对象产生作用。Simula I 的进程系统表明,面向对象程序设计的方式不止一种。仔细想一下,函数式语言或许是更好的设计方式,但是 Simula I 的发展告诉我们,现代面向对象程序设计被取代也很正常。

如果你喜欢这篇文章,欢迎关注推特 @TwoBitHistory,也可通过 RSS feed 订阅,获取最新文章(每四周更新一篇)。


  1. Jan Rune Holmevik, “The History of Simula,” accessed January 31, 2019, http://campus.hesge.ch/daehne/2004-2005/langages/simula.htm. ↩︎
  2. Ole-Johan Dahl and Kristen Nygaard, “SIMULA—An ALGOL-Based Simulation Langauge,” Communications of the ACM 9, no. 9 (September 1966): 671, accessed January 31, 2019, http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.384&rep=rep1&type=pdf. ↩︎
  3. Stein Krogdahl, “The Birth of Simula,” 2, accessed January 31, 2019, http://heim.ifi.uio.no/~steinkr/papers/HiNC1-webversion-simula.pdf. ↩︎
  4. 出处同上。 ↩︎
  5. Ole-Johan Dahl and Kristen Nygaard, “The Development of the Simula Languages,” ACM SIGPLAN Notices 13, no. 8 (August 1978): 248, accessed January 31, 2019, https://hannemyr.com/cache/knojd_acm78.pdf. ↩︎
  6. Dahl and Nygaard (1966), 676. ↩︎
  7. Dahl and Nygaard (1978), 257. ↩︎
  8. Krogdahl, 3. ↩︎
  9. Ole-Johan Dahl, “The Birth of Object-Orientation: The Simula Languages,” 3, accessed January 31, 2019, http://www.olejohandahl.info/old/birth-of-oo.pdf. ↩︎
  10. Dahl and Nygaard (1978), 265. ↩︎
  11. Holmevik. ↩︎
  12. Krogdahl, 4. ↩︎

via: https://twobithistory.org/2019/01/31/simula.html

作者:Two-Bit History 选题:lujun9972 译者:aREversez 校对:校对者ID

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

厌倦了 Windows 却买不起 Mac?这里有一份讲道理的最不坏发行版清单供你参考。

众所周知,所有的操作系统都很糟糕,只是有些比其他的更差一些。

在几乎在每一篇关于 Linux 的文章下都有这样的评论:有太多的发行版了,不知道该试试哪个。因此,我们觉得应该帮你简化一下,列出不同的发行版到底怎么样,告诉你它们在哪些方面很 糟糕

由于 Distrowatch 目前列出了多达 270 个发行版,如果我们把所有的发行版都体验一遍,那简直是件不可能完成的事。因此,我们需要对这个列表做个瘦身。

如果你对这样的比较感兴趣,那么可能你还没有找到最喜欢的。

0. 小众而寂寂无名的发行版,我说的是全部

避免在所有的小众的发行版上费劲。原因如下:首先,它们很小众。没有多少人使用它们,所以你很难找到可以寻求帮助的人。其次,第三方硬件和软件可能无法开箱即用,如果你向供应商寻求帮助,无论是游戏、显卡还是打印机,他们都不会听说过 Ultimate SuperL33tOS 树莓派版。然后就完了。不要选它们,坚持主流。

1. ChromeOS Flex

年年都在喊 Linux 桌面年来了,然而根本没有人注意到它是不是来了 —— 也许是因为上面没有写 “Linux” 吧。ChromeOS 只能运行在 ChromeBook 和 ChromeBox 上,但在全球疫情大流行之前,它们的销量曾一度超过 Mac。“Flex” 是适用于普通 PC 的版本,大概因为它是 1.5 万亿美元的谷歌做的而因此得名吧。ChromeOS Flex 非常好用,因为它只做一件事:浏览网页。你不能安装应用程序,甚至不能安装安卓应用程序:只有官方套件才可以。你可以运行 Debian 容器:如果你知道这意味着什么,就去运行 Debian。如果你不知道这意味着什么,相信我们,你不会想知道的。

2. Ubuntu

“Ubuntu 是一个古老的非洲单词,意思 是我用不来 Debian。”

Ubuntu 一开始是为了通过制造一个更容易安装和运行的 Linux 来取代 Windows 的头号消费操作系统的地位。它成功了。于是微软 威胁要起诉 它,因为如果你不细看的话,它看起来有点像 Windows,所以取代失败了。Ubuntu 决定,如果它不能看起来像 Windows,那么就 让它就像 Mac OS X。然后它又 回到了 GNOME

Ubuntu 曾经是显而易见的选择,但是它把目光从“ 为人类服务 for human beings ”的球上移开了(解释得很好,伙计们),转而关注服务器 —— 公平地说,这是赚钱的地方 —— 并且确实赚到了。当它放弃了所有内部的东西时,它保留了 Snap,这是它的通用应用程序打包格式,其他发行版都不用。这东西能用,但会占用磁盘空间,并使开机速度变慢。如果你只是想继续使用它,而不是摆弄和与之战斗,可以试试 Ubuntu MATE 或 Xubuntu,但这时你再想想我们对小众发行版的警告。

玩笑归玩笑,“Ubuntu” 是 恩古尼 Nguni 语( 恩德贝莱语 Ndebele 科萨语 Xhosa 祖鲁语 Zulu )的一个词,在南部非洲是一个更广泛的哲学概念,与社区中的尊重、仁慈和慷慨有关。其理念是,只有通过与他人进行亲社会互动,你才是一个人类。“umuntu ngumuntu ngabantu” —— “我是,因为你是”。

3. Linux Mint

Mint 是一个微调版的 Ubuntu 翻版。多年来它一直是个卢瑟,但是当 Ubuntu 变得像 Mac 一样时,它看到了机会并抓住了它 —— 同时也够到了榜单上第一的位置。它摒弃了 Ubuntu 中一些有问题的部分,比如 GNOME 和 Snap,但却用自己的不可靠的东西取代了它们,比如不是一个、不是两个、而是三个类 Windows 桌面的混乱选择,以及对更新和升级过于谨慎的态度。

4. Debian

Debian 是自由发行版的鼻祖,它发明了一种自动安装依赖关系的打包工具。它让安装 Linux 比以前更容易,但却陷入了 政治泥潭。它有点像 Ubuntu,但更过时,更难安装,而且驱动程序更少。如果这听起来正是你所需要的,那就去安装它吧。

5. Fedora

红帽公司通过从免费发行版转而销售异常无聊的企业服务器版而赚取了数十亿美元。这让那些吃白食的人很不高兴。Fedora 是红帽公司扔给他们的骨头。它已经成熟到可以与 Ubuntu 相媲美,但没有稳定的版本。你将会每年升级两次,除非你推迟升级,躺平啥都不干,并希望跳过每一个其他版本。除非你的日常工作是试图阻止你的 RHEL 机器倒下,或者试图构建能在 RHEL 机器上运行而不倒下的代码,否则可能不值得使用它。

6. openSUSE

SUSE 比红帽公司整整大半岁,它是另一个昂贵的企业发行版供应商,把免费的东西丢到了墙外。它对 Fedora 的不稳定版本问题的创新解决方案是有两个不同的发行版。一个是 “Leap”,与付费的 SUSE Linux Enterprise(SLE)同步 —— 也就是说,它的发布周期慢得令人痛苦。另一个,“Tumbleweed”,有一个滚动的发布模式,这意味着每天都有可能出现令人刺激的破坏性变化。

作为补偿,它使用 Btrfs 和快照来使回滚更新变得容易 —— 但软件包管理器不知道快照,也不了解 Btrfs 有名的无法告诉你有多少可用的磁盘空间的 习惯,所以它偶尔会填满你的文件系统并破坏它。沮丧的无聊或畏缩的恐怖,这是你的选择:愿你玩得开心!

SUSE 和 KDE 都产自于德国,它大约永远是 KDE 的最佳发行版。为了显示对 Linux 世界的深刻理解,Novell 收购了 SUSE,然后又 收购 了 GNOME 供应商 Ximian,然后强迫他们进行了一场 包办婚姻。所以现在 SLE 甚至不提供 KDE 作为选项。

7. RHEL 一家

IBM 的子公司红帽仍然是 Linux 世界的巨人。特别像克洛诺斯,他吃了自己的孩子。所以它 买下了 CentOS,然后把它 干掉,就像它 对 CoreOS 所做 的那样。

让我们随便混用一下古典典故,这导致了一个九头蛇的局面:又有许多脑袋冒了出来。如果 Fedora 是 RHEL 的一个 alpha 版本,那么 CentOS Stream 就是一种 beta 版本。

还有 Rocky Linux 和 AlmaLinux,它们是锉掉了序列号的 RHEL。如果你以后要在 RHEL 上部署东西,或者如果你正在为在红帽商店工作而提高技能,或者如果你只是买不起真货,这都是理想的选择。如果你觉得现在 Oracle 比红帽更值得信赖,那么还有 Oracle 的版本。

对于你自己的笔记本电脑来说,这些都是长期以来有点落后于时代的东西:如果你是一个大企业,这正是你想要的,但如果你在家里运行它,就不是了。

8. Pop!\_OS

Pop!\_OS 可以说是最有趣的 Ubuntu 翻版之一。说到这里,请记住那句关于生活在 有趣的时代 的名言,而开源世界的座右铭是 快速行动和打破常规。如果你一定要这么做,那就把它放在一台全新的电脑上,不要尝试双启动。另外,请记住我们对小众发行版说的话,这也适用于所有的 Ubuntu 翻版。

9. Arch Linux

最后,我们来到了名单上的第 10 个条目,因为 Unix 人要的就是不同,喜欢从零开始计算。作为最初的滚动发布的发行版之一,Arch 是快速行动和打破常规的体现。如果你是一个业余爱好者或游戏玩家,那就太好了,如果你有工作要做,那就不太好了。这也适用于它的后代,如 EndeavourOS、Manjaro 和 Garuda。

结论

有很多值得一试的发行版没有进入我们讽刺而(实则)深情的名单。这是列入前十名的原因:这个名单上的所有发行版都是目前领先的 Linux 发行版,这里的每一个都以自己的方式成为一个很好的、可靠的竞争者。

自由软件的世界之所以存在,是因为人们对正确的做事方式有强烈的感受,因此,它既有强烈的社区意识,也有深刻的、根本上对立的派别,如 蝶变党 Debianistas 帽子客 Hatters 的对立。而这还没有涉及到桌面或编辑器的战争。

还有很多其他的发行版也有完全合理的存在理由,比如我们的办公桌面就主要运行一个根本不在这个名单上的 发行版

都挺好,真的。


via: https://www.theregister.com/2022/05/31/the_cynics_guide_to_linux/

作者:Liam Proven in Prague 选题:wxy 译者:wxy 校对:wxy

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

GNOME Shell 在一台 Pinephone 原型机上运行

GNOME 开发人员在最近的一篇博文中提出了将 GNOME Shell 完全移植到手机上的想法。下面是我对这个项目的一些看法。

移动版 GNOME Shell

作为一个桌面环境,GNOME 在过去的十年中发展成为了 GNOME 40。GNOME 40 是一个重要的版本,它以一种现代的方式改变了完整的用户界面设计。

看着 GNOME 40 的设计方式,你可能会觉得 Shell 和它的底层技术已经为小屏幕做好了准备。手势驱动的工作区、图标网格和停靠区 —— 在某种程度上感觉更接近于像安卓这样的移动操作系统,而不是桌面环境。

此外,系统托盘、日历、通知和原生的应用程序,可以有效地在较小尺寸的设备上工作。得益于 GTK4 和 libadwaita,其设计是响应式的,应用程序和控件的外观与移动平台很匹配。

在 GNOME 40 之后,GNOME 开发者为较小尺寸的设备(如平板电脑和手机)设计了几个 GNOME Shell 的概念验证。

为什么是现在?

任何项目的开发和研究工作都要花费时间和金钱。虽然有来自主要科技公司对 GNOME 的捐赠,但这次有一个 “ 原型基金 Prototype Fund ” 帮助该团队继续进行这项努力。原型基金 是德国教育部(BMBF)支持公共利益软件的资助项目。

包括什么?

设计一个完整的移动用户界面,并将其与移动操作系统整合是一个非常复杂的项目。它需要一个精心设计的愿景来支持成千上万的移动硬件和用户支持。更不用说,用户在移动设备上的隐私和安全问题了。

因此,有了这个基金,团队可以集中精力进行概念验证,以满足 GNOME Shell 中一些基本的用户互动。

  • 启动器
  • 应用程序网格
  • 轻扫、手势和导航
  • 用手机键盘搜索
  • 检测屏幕大小和支持屏幕旋转
  • 工作空间和多任务
  • 设置
  • 屏幕键盘

GNOME Shell 移动版模拟图

始终要记住的是,移动体验远不止用户界面这么简单。另外,GNOME 本身并不是一个操作系统。它由底层的稳定的操作系统组成,它提供了非常需要的隐私和安全。另外,“应用商店”的概念也是如此。手机制造商需要与 GNOME 开发者合作,让他们的产品采用这个概念。

进展如何?

在写这篇文章时,团队给我们快速演示了取得的进展。在下面的视频中可以看到:

Phone

复杂的任务是识别触摸屏手机中的各种手势。例如,你可能会使用长触摸、短触摸、双指轻扫和拖动,以及许多只有在小尺寸设备中才可行的可能性。这需要在各自的 GNOME Shell 组件中推倒重构。

而完全在现有的 GNOME Shell 基础上开发它们是很有挑战性的工作。

此外,该团队使用著名的 Pinephone Pro 进行开发和测试。Pinephone 已经是一个商业产品,装有 “友商” KDE Plasma 手机和其他 Linux 操作系统。

Tablet

结语

如果一切按计划进行,我们可能在一个完整的开源手机中获得原生的 GNOME 体验。而你可以重新拥有你的隐私!

另外,我不确定 Phosh(它也是基于 GNOME 的)会发生什么。虽然 Phosh 是由 Purism 开发和管理的,但看看 GNOME Shell 在移动设备上的努力和 PHosh 在未来一段日子的发展方向将是很有趣的。

那么,你对这个项目的前景怎么看?请在下面的评论栏里告诉我。

图片和视频来源:GNOME 开发者 博客


via: https://www.debugpoint.com/2022/06/gnome-shell-mobile-announcement/

作者:Arindam 选题:lkxed 译者:wxy 校对:wxy

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

随着自动化扩展到涵盖 IT 的更多方面,越来越多的管理员正在学习自动化技能并应用它们来减轻他们的工作量。自动化可以减轻重复性任务的负担,并为基础设施增加一定程度的一致性。但是,当 IT 工作人员部署自动化时,会出现可能对大大小小的基础设施造成严重破坏的常见错误。在自动化部署中通常会出现五个常见错误。

缺乏测试

初学者常犯的错误是自动化脚本没有经过全面测试。由于拼写错误或逻辑错误,简单的 shell 脚本可能会对服务器产生不利影响。将该错误乘以基础架构中的服务器数量,你可能会遇到一大堆问题需要清理。在大规模部署之前始终测试你的自动化脚本。

意外负载

经常发生的第二个错误是没有预测脚本可能对其他资源施加的系统负载。当目标是十几个服务器时,运行从仓库下载文件或安装包的脚本可能没问题。脚本通常在成百上千台服务器上运行。这种负载可以使支持服务停止或完全崩溃。不要忘记考虑端点影响或设置合理的并发率。

离开脚本

自动化工具的一种用途是确保符合标准设置。自动化可以轻松确保组中的每台服务器都具有完全相同的设置。如果该组中的服务器需要根据该基线进行更改,同时管理员不了解合规标准,那么可能会出现问题。安装和启用不需要和不想要的服务,从而导致可能的安全问题。

缺乏文档

管理员的一项固定职责应该是记录他们的工作。由于合同到期、升职或定期员工流动,公司可能会在 IT 部门频繁招聘新员工。公司内的工作组相互隔离也很常见。由于这些原因,重要的是记录哪些自动化已经到位。与用户运行脚本不同,自动化可能会在创建它的人离开组之后继续很长时间。管理员可能会发现自己在其基础设施中面临着来自未经检查的自动化的奇怪行为。

缺乏经验

列表中的最后一个错误是管理员对他们正在自动化的系统不够了解。管理员经常被雇用到他们没有接受过足够培训且没有人可以求教的职位上工作。自 COVID 以来,当公司努力填补空缺时,这一点尤其重要。然后管理员被迫处理他们没有设置并且可能不完全理解的基础设施。这可能会导致非常低效的脚本浪费资源或配置错误的服务器。

结论

越来越多的管理员正在学习自动化来帮助他们完成日常任务。因此,自动化正被应用于更多的技术领域。希望此列表将有助于防止新用户犯这些错误,并敦促经验丰富的管理员重新评估他们的 IT 策略。自动化旨在减轻重复性任务的负担,而不是为最终用户带来更多工作。


via: https://fedoramagazine.org/five-common-mistakes-when-using-automation/

作者:Gary Scarborough 选题:lujun9972 译者:geekpi 校对:wxy

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