2023年7月

互联网档案馆要求 GitHub 下架 DRM 去除工具

互联网档案馆向 GitHub 发出移除请求,要求移除一个名为 DeGouRou 的工具。这是一个专门用于规避行业标准图书馆 TPM 的工具,可以允许读者保存他们借阅的图书的无 DRM 副本。互联网档案馆和其他图书馆使用这些 TPM 允许读者借阅加密图书,阅读加密图书,并归还加密图书。值得注意的是,互联网档案馆并“没有得到版权所有者的授权”提交这份移除通知。GitHub 满足了它的要求,但随后该软件代码出现在了更多地方。

消息来源:Torrent Freak
老王点评:嗯,被出版商们揪着不放的互联网档案馆,抽出手来打击一下盗版工具。

Meta 公司将发布 LLaMA 的商业版本

LLaMA 是 Meta 开源的大型语言模型(LLM),于今年 2 月公开发布,并提供给研究人员和学者使用,它有 70 亿、130 亿、330 亿和 650 亿等不同参数规模。开源的 LLaMA 中并没有包括其所使用的权重数据,但很快这些权重数据被“意外”泄露,并迅速引爆了一系列基于它的开源创新。尽管开源人工智能模型已经存在,但 Meta 的 LLaMA 商业化仍是重要的一步,因为它比市场上现有的许多开源 LLM 都要大,而且它来自全球最大的科技公司之一。

消息来源:ZDNet
老王点评:先开源培养生态,然后再基于此推出商业版本,这是一步好棋。

GTK 对 macOS 的支持将降到“尽力而为”的状态

GNOME 的开发者们正在考虑是否退役 macOS 上的 GLib 和 GTK 持续集成(CI)构建工具。除了 CI 硬件老化之外,CI 维护者对 macOS 也没有太多经验,而 GTK/GLib 开发者对 macOS 开发也不是特别感兴趣或熟悉。如果没有志愿者站出来处理 macOS 特定的回归问题,macOS CI 生成器可能会被逐步淘汰,反过来 GTK/GLib macOS 支持会降到“尽力而为”的状态,并依靠下游打包者和消费者来测试更改。

消息来源:Phoronix
老王点评:毕竟苹果公司不感兴趣,用户也寥寥无几,开发者自然也没有足够的动力和支持来进行。不过,还是有几个可以在 macOS 上运行的不错的 GNOME 软件的。

熟悉 ABI 的概念、ABI 稳定性的重要性以及 Linux 稳定 ABI 中包含的内容。
LCTT 译注:昨天,AlmaLinux 称将 放弃 对 RHEL 的 1:1 兼容性,但将保持对 RHEL 的 ABI 兼容,以便在 RHEL 上运行的软件可以无缝地运行在 AlmaLinux 上。可能有的同学对 ABI 的概念还不是很清楚,因此翻译此文供大家了解。

许多 Linux 爱好者都熟悉 Linus Torvalds 的 著名告诫:“我们不破坏用户空间”,但可能并非每个听到这句话的人都清楚其含义。

这个“第一规则”提醒开发人员关于应用程序的二进制接口(ABI)的稳定性,该接口用于应用程序与内核之间的通信和配置。接下来的内容旨在使读者熟悉 ABI 的概念,阐述为什么 ABI 的稳定性很重要,并讨论 Linux 稳定 ABI 中包含了哪些内容。Linux 的持续增长和演进需要对 ABI 进行变更,其中一些变更引起了争议。

什么是 ABI?

ABI 表示 应用程序二进制接口 Applications Binary Interface 。理解 ABI 概念的一种方式是考虑它与其他概念的区别。对于许多开发人员来说, 应用程序编程接口 Applications Programming Interface (API)更为熟悉。通常,库的头文件和文档被认为是其 API,以及还有像 HTML5 这样的标准文档。调用库或交换字符串格式数据的程序必须遵守 API 中所描述的约定,否则可能得到意外的结果。

ABI 类似于 API,因为它们规定了命令的解释和二进制数据的交换方式。对于 C 程序,ABI 通常包括函数的返回类型和参数列表、结构体的布局,以及枚举类型的含义、顺序和范围。截至 2022 年,Linux 内核仍然几乎完全是 C 程序,因此必须遵守这些规范。

内核系统调用接口” 的描述可以在《Linux 手册第 2 节》中找到,并包括了可从中间件应用程序调用的类似 mountsync 的 C 版本函数。这些函数的二进制布局是 Linux ABI 的第一个重要组成部分。对于问题 “Linux 的稳定 ABI 包括哪些内容?”,许多用户和开发人员的回答是 “sysfs(/sys)和 procfs(/proc)的内容”。而实际上,官方 Linux ABI 文档 确实主要集中在这些 虚拟文件系统 上。

前面着重介绍了 Linux ABI 在程序中的应用方式,但未涵盖同等重要的人为因素。正如下图所示,ABI 的功能需要内核社区、C 编译器(如 GCCclang)、创建用户空间 C 库(通常是 glibc)的开发人员,以及按照 可执行与链接格式(ELF) 布局的二进制应用程序之间的合作努力。

开发社区内的合作

为什么我们关注 ABI?

来自 Torvalds 本人的 Linux ABI 的稳定性保证,使得 Linux 发行版和个人用户能够独立更新内核,而不受操作系统的影响。

如果 Linux 没有稳定的 ABI,那么每次内核需要修补以解决安全问题时,操作系统的大部分甚至全部内容都需要重新安装。显然,二进制接口的稳定性是 Linux 的可用性和广泛采用的重要因素之一。

Terminal output

如上图所示,内核(在 linux-libc-dev 中)和 Glibc(在 libc6-dev 中)都提供了定义文件权限的位掩码。显然,这两个定义集必须一致!apt 软件包管理器会识别软件包提供每个文件。Glibc ABI 的潜在不稳定部分位于 bits/ 目录中。

在大部分情况下,Linux ABI 的稳定性保证运作良好。按照 康韦定律 Conway's Law ,在开发过程中出现的烦人技术问题往往是由于不同软件开发社区之间的误解或分歧所致,而这些社区都为 Linux 做出了贡献。不同社区之间的接口可以通过 Linux 包管理器的元数据轻松地进行想象,如上图所示。

Y2038:一个 ABI 破坏的例子

通过考虑当前正在进行的、缓慢发生 的 “Y2038” ABI 破坏的例子,可以更好地理解 Linux ABI。在 2038 年 1 月,32 位时间计数器将回滚到全零,就像较旧车辆的里程表一样。2038 年 1 月听起来还很遥远,但可以肯定的是,如今销售的许多物联网设备仍将处于运行状态。像今年安装的 智能电表智能停车系统 这样的普通产品可能采用的是 32 位处理器架构,而且也可能不支持软件更新。

Linux 内核已经在内部转向使用 64 位的 time_t 不透明数据类型来表示更晚的时间点。这意味着像 time() 这样的系统调用在 64 位系统上已经变更了它们的函数签名。这些努力的艰难程度可以在内核头文件中(例如 time\_types.h)清楚地看到,在那里放着新的和 _old 版本的数据结构。

里程表翻转

Glibc 项目也 支持 64 位时间,那么就大功告成了,对吗?不幸的是,根据 Debian 邮件列表中的讨论 来看,情况并非如此。发行版面临难以选择的问题,要么为 32 位系统提供所有二进制软件包的两个版本,要么为安装介质提供两个版本。在后一种情况下,32 位时间的用户将不得不重新编译其应用程序并重新安装。正如往常一样,专有应用程序才是一个真正的头疼问题。

Linux 稳定 ABI 里到底包括什么内容?

理解稳定 ABI 有些微妙。需要考虑的是,尽管大部分 sysfs 是稳定 ABI,但调试接口肯定是不稳定的,因为它们将内核内部暴露给用户空间。Linus Torvalds 曾表示,“不要破坏用户空间”,通常情况下,他是指保护那些 “只想它能工作” 的普通用户,而不是系统程序员和内核工程师,后者应该能够阅读内核文档和源代码,以了解不同版本之间发生了什么变化。下图展示了这个区别。

稳定性保证

普通用户不太可能与 Linux ABI 的不稳定部分进行交互,但系统程序员可能无意中这样做。除了 /sys/kernel/debug 以外,sysfs(/sys)和 procfs(/proc)的所有部分都是稳定的。

那么其他对用户空间可见的二进制接口如何呢,包括 /dev 中的设备文件、内核日志文件(可通过 dmesg 命令读取)、文件系统元数据或在内核的 “命令行” 中提供的 “引导参数”(在引导加载程序如 GRUB 或 u-boot 中可见)呢?当然,“这要视情况而定”。

挂载旧文件系统

除了 Linux 系统在引导过程中出现挂起之外,文件系统无法挂载是最令人失望的事情。如果文件系统位于付费客户的固态硬盘上,那么问题确实十分严重。当内核升级时,一个能够在旧内核版本下挂载的 Linux 文件系统应该仍然能够挂载,对吗?实际上,“这要视情况而定”。

在 2020 年,一位受到伤害的 Linux 开发人员在内核的邮件列表上 抱怨道

内核已经接受这个作为一个有效的可挂载文件系统格式,没有任何错误或任何类型的警告,而且已经这样稳定地工作了多年……我一直普遍地以为,挂载现有的根文件系统属于内核<->用户空间或内核<->现有系统边界的范围,由内核接受并被现有用户空间成功使用的内容所定义,升级内核应该与现有用户空间和系统兼容。

但是有一个问题:这些无法挂载的文件系统是使用一种依赖于内核定义,但并未被内核使用的标志的专有工具创建的。该标志未出现在 Linux 的 API 头文件或 procfs/sysfs 中,而是一种 实现细节)。因此,在用户空间代码中解释该标志意味着依赖于“未定义行为”,这是个几乎会让每个软件开发人员都感到战栗的短语。当内核社区改进其内部测试并开始进行新的一致性检查时,“man 2 mount” 系统调用突然开始拒绝具有专有格式的文件系统。由于该格式的创建者明确是一位软件开发人员,因此他未能得到内核文件系统维护者的同情。

施工标志上写着工作人员在树上进行工作

线程化内核的 dmesg 日志

/dev 目录中的文件格式是否保证稳定或不稳定?dmesg 命令 会从文件 /dev/kmsg 中读取内容。2018 年,一位开发人员 为 dmesg 输出实现了线程化,使内核能够“在打印一系列 printk() 消息到控制台时,不会被中断和/或被其他线程的并发 printk() 干扰”。听起来很棒!通过在 /dev/kmsg 输出的每一行添加线程 ID,实现了线程化。密切关注的读者将意识到这个改动改变了 /dev/kmsg 的 ABI,这意味着解析该文件的应用程序也需要进行相应的修改。由于许多发行版没有编译启用新功能的内核,大多数使用 /bin/dmesg 的用户可能没有注意到这件事,但这个改动破坏了 GDB 调试器 读取内核日志的能力。

确实,敏锐的读者会认为 GDB 的用户运气不佳,因为调试器是开发人员工具。实际上并非如此,因为需要更新以支持新的 /dev/kmsg 格式的代码位于内核自己的 Git 源代码库的 “树内” 部分。对于一个正常的项目来说,单个代码库内的程序无法协同工作就是一个明显的错误,因此已经合并了一份 使 GDB 能够与线程化的 /dev/kmsg 一起工作的补丁

那么 BPF 程序呢?

BPF 是一种强大的工具,可以在运行的内核中监控甚至实时进行配置。BPF 最初的目的是通过允许系统管理员即时从命令行修改数据包过滤器,从而支持实时网络配置。Alexei Starovoitov 和其他人极大地扩展了 BPF,使其能够跟踪任意内核函数。跟踪明显是开发人员的领域,而不是普通用户,因此它显然不受任何 ABI 保证的约束(尽管 bpf() 系统调用 具有与其他系统调用相同的稳定性承诺)。另一方面,创建新功能的 BPF 程序为“取代内核模块成为扩展内核的事实标准手段”提供了可能性。内核模块使设备、文件系统、加密、网络等工作正常,因此明显是“只希望它工作”的普通用户所依赖的设施。问题是,与大多数开源内核模块不同,BPF 程序传统上不在内核源代码中。

2022 年春季,一个提案 成为了焦点,该提案提议使用微型 BPF 程序而不是设备驱动程序补丁,对广泛的人机接口设备(如鼠标和键盘)提供支持。

随后进行了一场激烈的讨论,但这个问题显然在 Torvalds 在开源峰会上的评论 中得到解决:

他指出,如果你破坏了“普通(非内核开发人员)用户使用的真实用户空间工具”,那么你需要修复它,无论是否使用了 eBPF。

一致意见似乎正在形成,即希望其 BPF 程序在内核更新后仍能正常工作的开发人员 将需要将其提交到内核源代码库中一个尚未指定的位置。敬请关注后继发展,以了解内核社区对于 BPF 和 ABI 稳定性将采取什么样的政策。

结论

内核的 ABI 稳定性保证适用于 procfs、sysfs 和系统调用接口,但也存在重要的例外情况。当内核变更破坏了“树内”代码或用户空间应用程序时,通常会迅速回滚有问题的补丁。对于依赖内核实现细节的专有代码,尽管这些细节可以从用户空间访问,但它并没有受到保护,并且在出现问题时得到的同情有限。当像 Y2038 这样的问题无法避免 ABI 破坏时,会以尽可能慎重和系统化的方式进行过渡。而像 BPF 程序这样的新功能提出了关于 ABI 稳定性边界的尚未解答的问题。

致谢

感谢 Akkana PeckSarah R. NewmanLuke S. Crawford 对早期版本材料的有益评论。

(题图:MJ/da788385-ca24-4be5-bc27-ad7e7ef75973)


via: https://opensource.com/article/22/12/linux-abi

作者:Alison Chaiken 选题:lkxed 译者:ChatGPT 校对:wxy

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

在 Bash 基础系列的这一章中,学习如何向 Bash 脚本传递参数并使它们具有交互性。

来让 Bash 脚本有参数吧 ?

你可以通过向 Bash 脚本传递变量来使其更加有用和更具交互性。

让我通过示例详细向你展示这一点。

将参数传递给 Shell 脚本

当你运行 Shell 脚本时,你可以按以下方式向其中添加其他变量:

./my_script.sh var1 var2

在脚本内部,你可以使用 $1 作为第一个参数,$2 作为第二个参数,依此类推。

? $0 是一个特殊变量,保存正在执行的脚本的名称。

让我们通过一个实际的例子来看看。切换到保存练习 Bash 脚本的目录。

mkdir -p bash_scripts && cd bash_scripts

现在,创建一个名为 arguments.sh (我想不出更好的名称)的新 Shell 脚本,并向其中添加以下行:

#!/bin/bash

echo "Script name is: $0"
echo "First argument is: $1"
echo "Second argument is: $2"

保存文件并使其可执行。现在像往常一样运行脚本,但这次向其中添加任意两个字符串。你将看到屏幕上打印的详细信息。

? 参数由空格(空格、制表符)分隔。如果参数中有空格,请使用(英文)双引号将其引起来,否则它将被视为单独的参数。

Pass arguments to the bash scripting

? Bash 脚本最多支持 255 个参数。但对于参数 10 及以上,你必须使用花括号 ${10}${11}...${n}

正如你所看到的,$0 代表脚本名称,而其余参数存储在编号变量中。你还可以在脚本中使用一些其他特殊变量。

特殊变量变量描述
$0脚本名称
$1$2、……$9脚本参数
${n}脚本参数从 10 到 255
$#参数数量
$@所有参数
$$当前 Shell 的进程 ID
$!最后执行的命令的进程 ID
$?最后执行命令的退出状态
?️‍♀️ 修改上面的脚本以显示参数数量。

如果参数数量不匹配怎么办?

在上面的示例中,你为 Bash 脚本提供了两个参数并在脚本中使用了它们。

但是,如果你只提供一个参数或三个参数怎么办?

让我们实际做一下吧。

Passing fewer or more arguments to bash script

正如你在上面所看到的,当你提供的参数超出预期时,结果仍然是一样的。不使用其他参数,因此不会产生问题。

但是,当你提供的参数少于预期时,脚本将显示空白。如果脚本的一部分依赖于缺少的参数,这可能会出现问题。

接受用户输入并制作交互式 Bash 脚本

你还可以创建提示用户通过键盘提供输入的 Bash 脚本。这使你的脚本具有交互性。

read 命令提供了此功能。你可以这样使用它:

echo "Enter something"
read var

上面的 echo 命令不是必需的,但最终用户不会知道他们必须提供输入。然后用户在按回车键之前输入的所有内容都存储在 var 变量中。

你还可以显示提示消息并在单行中获取值,如下所示:

read -p "Enter something? " var

让我们看看它的实际效果。创建一个新的 interactive.sh Shell 脚本,内容如下:

#!/bin/bash

echo "What is your name, stranger?"
read name
read -p "What's your full name, $name? " full_name
echo "Welcome, $full_name"

在上面的示例中,我使用 name 变量来获取名称。然后我在提示中使用 name 变量,并在 full_name 变量中获取用户输入。我使用了两种使用 read 命令的方法。

现在,如果你授予执行权限,然后运行此脚本,你会注意到该脚本显示 What is your name, stranger?,然后等待你从键盘输入内容。你提供输入,然后它会显示 What's your full name 消息,并再次等待输入。

以下是供你参考的示例输出:

Interactive bash shell script

?️ 练习时间

是时候练习你所学到的东西了。尝试为以下场景编写简单的 Bash 脚本。

练习 1:编写一个带有三个参数的脚本。你必须使脚本以相反的顺序显示参数。

预期输出:

abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora arch
Arguments in reverse order:
arch fedora ubuntu

练习 2:编写一个脚本,显示传递给它的参数数量。

提示:使用特殊变量 $#

预期输出:

abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and three
Total number of arguments: 5

练习 3:编写一个脚本,将文件名作为参数并显示其行号。

提示:使用 wc 命令来计算行号。

你可以在社区中讨论你的解决方案。

很好! 现在你可以(传递)参数了 ? 在下一章中,你将学习在 Bash 中执行基本数学运算。

(题图:MJ/5a75aa2f-1cb1-4009-a4e6-683cf61bc892)


via: https://itsfoss.com/bash-pass-arguments/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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

AlmaLinux 不再追求与 RHEL 的 1:1 兼容性

随着红帽对 RHEL 源代码库的限制访问,虽然 Rocky Linux 已经表示 找到 了继续发布 1:1 克隆品的解决方案,但 AlmaLinux “决定放弃与 RHEL 1:1(兼容)的目标”。退而求其次,AlmaLinux 将在可能的范围内与 RHEL 保持一致并兼容应用二进制接口(ABI),这样在 RHEL 上运行的软件也可以在 AlmaLinux 上运行。对于典型的用户,这将意味着你在使用 AlmaLinux 时几乎不会有什么变化。最大的变化是,AlmaLinux 将不再与红帽保持 “问题级的兼容性”,现在可以接受红帽发布周期之外的问题修复。虽然这意味着一些 AlmaLinux 的用户可能会遇到 RHEL 中没有的问题,但 AlmaLinux 也可能会接受尚未被 RHEL 接受的补丁。

消息来源:Almalinux
老王点评:这就是红帽的目的吧?最终这些精确克隆品的结果可能都这样吧。但是我很怀疑红帽以后还会给建立 ABI 兼容也制造“没必要提供的”麻烦。

好莱坞想要永远免费得到龙套演员的人工智能复制品

好莱坞的演员们将要举行一场罢工,主要的原因是好莱坞电影公司的一项以“保护演员的数字肖像权”为名义的人工智能提案。在该提案中,那些经常出现在背景中的龙套演员会被一次性扫描,而电影公司将拥有他们的扫描件、形象、肖像,并且能在他们想要的任何项目中永远使用,无需同意,无需补偿。使用生成式人工智能一直是双方谈判的主要症结之一。组织罢工的演员工会表示,“如果我们现在不站得高一点,我们都会有麻烦,我们都会面临被机器取代的危险。”

消息来源:The Verge
老王点评:别说是龙套,就是主角和配角,将来都会全是 AI 制品,早晚而已。

2027 年欧盟销售的智能手机电池需要可更换

6 月中旬,欧洲议会投票通过新立法,要求智能手机等消费设备的电池必须易于拆卸和更换。本周,欧洲理事会正式同意了这项新法规。任何想要在欧盟销售手机的制造商必须确保这些手机在 2027 年之前拥有可更换电池。

消息来源:Android Authority
老王点评:自从智能手机开始流行,不知道为什么大家就接受了电池不可更换的做法。现在,欧洲带了一个好头。

回音

  • Bcachefs 在进入 Linux 6.5 受阻后,计划两个月 再次尝试 进入 Linux 6.6。

使用这些步骤来为你的第一个或接下来的项目打下坚实的基础。

开源 是一个蓬勃发展且有益的生态系统,它通过分散模式和社区贡献开发的软件,公开解决社区和行业问题。

随着这个生态系统的爆炸式发展,许多开发者想要参与并且构建新的开源项目。问题是:如何成功实现这一目标呢?

这篇文章将会揭秘开源项目的生命周期与结构。给你一个对开源项目内部运作的概述,并根据我个人的经验,向你展示如何构建一个成功和可持续发展的项目。

对开源的简单概述

开源促进会 Open Source Initiative (OSI)提供了对“ 开源 Open Source ”的正式、详细的定义,但是维基百科提供了一个很好的总结:

开源软件是指根据许可证发布的计算机软件,版权持有人授予用户使用、研究、更改和向任何人、为了任何目的分发软件和它的源代码的权利。

开源软件通常在网络上有公开的代码,它由多人合作或一人开发。这就需要与来自不同地区、不同文化和不同技术背景的人合作,而且往往是远程合作。

开源项目的构成

就像人类的身体,一个开源项目由多个结构组成,这些结构构成了整个系统。我认为它们是两个分支:人员(微观)和文档(宏观)。

分支一:人员

通常,一个开源项目包括以下人群:

  • 创建者:创建项目的人
  • 维护者:积极管理整个项目的人
  • 贡献者:为项目做贡献的人(像你一样的人!)
  • 用户:使用这个项目的人,包括开发者和非技术客户
  • 工作组:将贡献者分成特定领域的小组,专注于围绕特定主题领域(如文档、指引、测试、DevOps、代码审查、性能、研究等)的集合。
  • 赞助人:为项目提供资金支持的人

当你准备构建一个新项目时,你需要考虑以上列表中的每一个群组。你对他们每个人有什么计划?

  • 对于维护者,请确定任用维护者的标准。通常,积极的贡献者就是最适合的维护者。
  • 对于用户和贡献者,你需要准备可靠的文档、引导流程和他们使用你的项目取得成功所需的一切。
  • 对于工作组,请确定你是否需要它们,以及你的项目将来如何有逻辑地拆分。
  • 最后,对于赞助人,你必须提供足够的数据和有关你项目的信息,以便他们选择赞助你。

你不必在你项目的起始阶段解决上面所有问题。然而,在早期阶段思考它们是很明智的,这样你就能打下正确的基础,确保未来的扩建项目能够站稳脚跟并取得成功。

分支二:文档

开源项目通常包括下列文档,通常为纯文本或 markdown 格式:

  • 许可证(License): 这份法律文件解释了如何以及在何种程度上可以自由使用、修改和共享本项目。OSI 网站上有 OSI 认可的许可证列表。如果没有明确的许可证,你的项目在法律上就不是开源的!
  • 行为准则:该文件概述了任何决定以任何方式参与项目的人的规则、规范、可接受做法和责任(包括当有人违反任何规则时会发生什么)。贡献者公约 是一个很好的示例,它是开源的(采用知识共享许可协议)。
  • 自述文件(README):这个文件向新用户介绍你的项目。在很多 Git 托管网站上,比如 GitLab、GitHub 和 Codeberg,自述文件会显示在仓库的初始文件列表下。这里通常会提供文档,以及其他必要文档的链接。
  • 文档(Documentation):这是一个包含所有本项目文件资源的文件或目录,包括指南、API 参考、教程等。
  • 贡献指南(Contributing):包含一份说明如何为项目做出贡献的文件,包括安装指南、配置等。
  • 安全(Security):包括一个解释如何提交漏洞报告或安全问题的文件。

此外,一个项目通常有用于议题、支持和协作的网页。

大致包括:

  • 议题或错误报告:用户可以报告错误的地方。该页面还为开发人员提供了一个地方,让他们可以分配自己的任务来修复一个或多个错误。
  • 拉取或合并请求:提供功能增强建议和错误解决方案的地方。这些补丁可以由任何人创建,由维护者审核,然后合并到项目代码中。
  • 讨论:维护者、贡献者和用户讨论开源项目的地方。它可以是一个专门的网站,也可以是协作编码网站中的一个论坛。

大多数项目还通过在线聊天的形式为社区成员之间的对话和互动提供交流渠道。

许可证

许可证 也许是创建开源项前需要考虑的最简单但也是最重要的标准。许可证定义了允许使用、修改和共享项目源代码和其他组件的条款和条件。

许可证包含大量的法律术语,很多人并不完全理解。我使用 choosealicense.com,它可以帮助你根据你的目标社区、你从使用你的代码的人那里获得补丁的愿望,或者你允许别人使用你的代码而不分享他们对你的代码所做的改进来选择许可证。

图片由: (Bolaji Ayodeji, CC BY-SA 4.0)

这为何时使用 MIT 许可或 GNU GPLv3 许可提供了指导。它还建议为社区做出贡献的人们使用该社区所偏好的许可证。该图表还指出,还有更多许可证可供选择。网站 choosealicense.com 有一个基于文本的版本,可以链接到更详细的信息。

创建一个开源项目的 13 个阶段

现在是关键问题:如何开始开源软件项目?

以下是我所认为的开源项目的各个阶段。

  1. 集思广益,撰写提纲,妥善记录。
  2. 开始根据你的想法进行开发。这通常包括确定要使用的正确工具和技术栈、编写一些代码、对代码进行版本控制、调试、喝点咖啡、在 StackOverflow 上闲逛、使用其他开源项目、睡觉、构建一些东西来解决确定的问题 —— 或者只是为了好玩!
  3. 在本地测试项目,根据需要编写一些单元测试和集成测试,根据需要设置 CI/CD 管道,创建一个暂存分支(在合并到主分支之前测试代码的测试分支),并完成部署项目所需的其他工作。
  4. 编写 良好有效的文档。这应该包括你的项目是做什么的,为什么它是有用的,如何开始使用它(使用、安装、配置、贡献),以及人们在哪里可以得到支持。
  5. 确保记录所有你希望使用的代码约定。使用诸如 代码检查工具 Linter 、代码格式化工具、Git 钩子和 注释规范化工具 Commitizen 命令行工具等工具来执行这些约定。
  6. 选择合适的许可证并创建自述文件。
  7. 在互联网上发布项目(可能最初是一个私有的资源库,在这一步将其公开)。
  8. 建立发布和记录更新日志的流程(你可以使用 Changesets 等工具)。
  9. 向全世界推广项目!你可以在社交媒体上发帖、创办新闻简讯、私下与朋友分享、进行产品发布、现场直播或其他任何你知道的传统营销策略。
  10. 使用任何可用的融资平台寻求资金支持,如 Open Collective、GitHub Sponsors、Patreon、Buy me a Coffee、LiberaPay 等。当你在这些平台上创建账户时,请在项目文档和网站中添加相关链接。
  11. 围绕你的项目建立一个社区。
  12. 在必要时,考虑引入工作组,将项目管理分成合理的部分。
  13. 不断实施新理念,维持项目背后的资源和人员。

随着项目的进展,对项目的不同部分进行评估非常重要。这将为你提供可用于评估和未来发展战略的数据。

现在开始一个项目吧!

我希望这篇文章能帮助你推进你一直在考虑的项目。

你可以将其用作指南,并在构建你的一流开源软件项目时填补我遗漏的任何空白。

(题图:MJ/a22b4011-9b1e-41e6-a73f-bdeac4858007)


via: https://opensource.com/article/22/9/build-open-source-project

作者:Bolaji Ayodeji 选题:lkxed 译者:wcjjdlhws 校对:wxy

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

一个用于各种 Linux 桌面的最佳光标主题的混合列表。

定制 Linux 桌面 时,我们经常忽视光标主题。一个经过深思熟虑选择的光标主题可以提升你的 Linux 桌面,增添个性化的风格并提升整体美感。从简约而精致的设计到奇妙而有趣的动画,这里是十个适合每个人的最佳光标主题。

如何在 Linux 桌面下载和安装光标主题

对于下面列出的所有主题,在相应页面上找到下载链接。下载压缩文件并解压缩。然后,将顶层的主题文件夹复制到 Linux 发行版中的 ~/.icons/usr/share/icons 目录中。然后按照下面的步骤进行相应桌面的设置。

Xfce

从应用菜单中选择 “ 设置 Settings > 设置管理 Settings manager > 鼠标和触摸板 Mouse and Touchpad ”。然后转到 “ 主题 Themes ” 选项卡并选择相应的光标主题。你还可以选择光标大小。

在 Xfce 桌面设置光标主题

KDE Plasma

从 KDE 应用菜单打开 “ 系统设置 System Settings ”。然后选择 “ 工作空间主题 Workspace theme > 光标 Cursors ”。选择主题并点击 “ 应用 Apply ”。

在 KDE Plasma 桌面设置光标主题

GNOME

对于 GNOME 桌面,请安装 GNOME “ 调整 Tweaks ” 工具。你可以在基于 Debian 的系统上使用以下命令进行安装。

sudo apt install gnome-tweak-tool

安装后,你可以打开 GNOME 调整工具并选择 “ 外观 Appearance ”。然后从下拉菜单中选择光标。

GNOME Tweaks

Linux 的最佳光标主题

Bibata

Bibata 是一套备受赞誉的光标主题,已成为寻求个性化体验的用户的最爱。这个主题因其独特的圆角外观和各种颜色选项而最近变得流行起来。

这个多功能主题有各种变体,包括 Bibata Original Amber 和 Bibata Modern Amber,分别具有带有黄色调的尖锐或圆角边缘。同样,Bibata Original Classic 和 Bibata Modern Classic 提供带有尖锐或圆角边缘的黑色光标。而 Bibata Original Ice 和 Bibata Modern Ice 提供带有尖锐或圆角边缘的白色光标。

Bibata Ice

Bibata Classic

Bibata Amber

你可以从下面的页面下载这个主题。

下载 Bibata 光标(Ice)

Phinger

Phinger 光标以其复杂的设计和精心的工程而闻名,是最复杂和“过度设计”的光标主题之一。它与 GNOME、MATE 和 Xfce 桌面环境兼容,并为不同 Linux 发行版的用户提供了多功能选项。该主题拥有黑白两种变体,确保简约而精致的光标体验。

Phinger 光标

你可以从下面的页面下载它,并按照上面给出的说明进行安装。

下载 Phinger 光标

Comix

Comix 光标是个早期的光标主题,为你的 Linux 桌面注入了令人愉悦的漫画风格。这个 X11 鼠标主题包含 12 个独特的光标主题,每个主题都设计成在提升桌面工作流程的同时唤起一种活泼有趣的氛围。

Comix 光标

Comix 光标提供了六种颜色选择(黑色、蓝色、绿色、橙色、红色和白色),为用户提供了一系列选择,以适应他们的个人风格和桌面美学。Comix 主题中的每个光标都具有微妙的阴影效果,为其注入活力和深度。这种动态元素增强了光标的视觉吸引力,并为桌面工作流程增添了一种动感。

你可以从下面的页面下载这个光标主题。

下载 Comix 光标

McMojave

McMojave 光标从 macOS 获得灵感,是一个 x-cursor 主题,它基于流行的 capitaine-cursors 主题。这个主题旨在重新创建在 macOS 中找到的熟悉的光标样式,让 Linux 用户在他们的桌面上享受一丝 Mac 的体验。

(LCTT 译注:x-cursor 是一种标准,用于描述和命名光标主题的文件格式和规范。x-cursor 主题通常用于 Linux 操作系统中的桌面环境,如 GNOME、KDE 和 Xfce。)

McMojave 光标

尽管 McMojave 光标旨在重现 macOS 的光标体验,但它也为喜欢添加个人特色的用户提供了自定义选项。用户可以根据自己的喜好进行调整和修改,从而在 Linux 上实现个性化的光标体验。

你可以从下面的页面下载 McMojave 光标。

下载 McMojave 光标

Layan

Layan 光标是一个 x-cursor 主题,灵感来自受欢迎的 Layan GTK 主题,并融入了成熟的 capitaine-cursors 的元素。这个独特的光标主题给 Linux 桌面体验增添了一丝时髦感。

与传统的箭头形状光标不同,Layan 光标采用了独特的椭圆形状设计。这种非传统的形状为整体光标体验增添了一种活泼和时髦的元素,使它与更传统的主题有所区别。

Layan 光标

你可以使用下面的链接进行下载。

下载 Layan 光标

Material

Material 光标是 Linux 用户长期以来的最爱,提供了一个视觉上吸引人的光标主题,得到了无数忠实用户的认可。该光标主题有三种颜色变体,即 Material(蓝灰)、Dark 和 Light,以及从 24 像素到 64 像素的多种尺寸选项,适应了各种偏好和桌面环境。

Material 光标

成千上万的人每天都依赖于这个光标主题,展示了它持久的吸引力和可靠性。

凭借其三种颜色变体、多样的尺寸选项和广泛的采用,这个光标主题旨在提升你 Linux 桌面的美学,提供令人愉悦和沉浸式的光标体验。

你可以使用下面的链接下载这个光标主题。

下载 Material 光标

Oreo

Oreo 光标以其丰富多彩的材质设计和迷人的动画为你的 Linux 桌面增添了令人愉悦的元素。这些光标旨在为你的光标体验增添一丝奇趣和个性。

Oreo 光标

Oreo 光标的独特之处在于其迷人的动画效果。这些动画光标注入了一种活泼和生动的元素,使你与桌面的交互感觉更具吸引力和愉悦感。

此外,这个主题通过提供自定义颜色生成器更进一步。用户可以使用配置文件创建自己的光标颜色方案,为光标设计带来无限的可能性和个性化。

你可以使用下面的链接下载这个主题。

下载 Oreo 光标

Bibata Rainbow

Bibata Rainbow 光标扩展自受欢迎的 Bibata 光标主题,引入了半动画的彩虹颜色,增强了你的 Linux 桌面体验。这些光标是使用 clickgen 精心制作,并用 puppeteer 渲染的,确保高质量的视觉效果和平滑的动画。

Bibata Rainbow

Bibata Rainbow 中的每个光标包含大约 23 个帧,即使在 HiDPI(高像素密度)环境下,也能实现平滑的动画效果。这确保了具有高分辨率显示屏的用户可以享受无缝和视觉上令人愉悦的光标体验。

你可以使用下面的链接下载 Bibata Rainbow 光标主题。

下载 Bibata Rainbow 光标

Miniature

Miniature 光标是从一个同名 Windows 光标主题移植的,它提供了一种以小尺寸为特点的独特光标体验。顾名思义,这些光标被设计成紧凑型,可能非常适合各种用途。该主题整体采用清晰的白色,并提供了一个扁平设计和一个带有微妙阴影效果的变体。

Miniature 光标

你可以从下面的链接下载这个光标主题。

下载 Miniature 光标

Capitaine

Capitaine 光标是一个 x-cursor 主题,灵感来自 macOS,基于 KDE Breeze 图标包,提供了一种视觉上协调的光标体验。这个光标主题旨在与 La Capitaine 图标包完美配合,为你的 Linux 桌面创建一个统一的视觉风格。

Capitaine Cursors

Capitaine 光标提供了白色和黑色两种变体,让用户可以根据自己的桌面环境或个人偏好选择最合适的颜色。无论你喜欢浅色还是深色光标,Capitaine 光标都能满足你的需求。

你可以使用下面的链接下载这个主题。

下载 Capitaine 光标

结论

在本文中,我们介绍了一些令人着迷的 Linux 光标主题,展示了一系列受欢迎的选择,可以改变你与桌面的交互方式。我希望你能找适合你 Linux 桌面上喜爱的主题或图标包的完美光标。

以上所有的光标主题都在最新的发行版和桌面版本中进行了测试。你可以尝试它们!

图片来源:各个主题作者。

(题图:MJ/35aaca9e-9ff3-49f2-b311-20e7fcfb5c9d)


via: https://www.debugpoint.com/best-cursor-themes/

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

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