标签 编程 下的文章

Hedy 是一种专门为教人编程而设计的新型编程语言。

 title=

学习编程既要学习编程逻辑,又要学习特定编程语言的语法。我在大学上第一堂编程课的时候,教的语言是 C++。第一个代码例子是基本的 “Hello World” 程序,就像下面的例子。

#include <iostream>

int main() {
    std::cout << "Hello World!";
    return 0;
}

老师直到几节课后才会解释大部分的代码。我们的期望是,我们只需输入代码,并最终了解为什么需要这些东西以及它们如何工作。

C++(以及其他类似的语言)的复杂语法是为什么 Python 经常被建议作为一种更容易的编程教学语言。下面是 Python 中的同一个例子:

print("Hello World!")

虽然 Python 中的 “Hello World” 基础例子要简单得多,但它仍然有复杂而精确的语法规则。print 函数需要在字符串周围加括号和引号。这对于没有编程经验的人来说,还是会感到困惑。Python 比 C++ 少了 “我以后再解释” 的语法问题,但还是有一些。

Hedy 是一种专门为编码教学而设计的新语言,它通过在语言中将复杂性分成多个关卡来解决语法复杂性的问题。Hedy 没有马上提供语言的全部功能,而是采取循序渐进的方式,随着学生在 Hedy 的学习的通关,慢慢变得更加复杂。随着关卡的进展,该语言获得了新的功能,最终变得更像 Python。目前有七个关卡,但更多的关卡正在计划中。

在第 1 关,Hedy 程序除了打印(print)一条语句(不需要引号或括号),提出(ask)一个问题,并回传(echo)一个答案外,不能做任何事情。第 1 关没有变量,没有循环,结构极精简。回传的工作原理几乎和变量一样,但只针对用户的最后一个输入。这可以让学生对基本概念感到舒适,而不必一下子学习所有的东西。

这是一个第 1 关的 Hedy “Hello World” 程序:

print Hello World

第 2 关引入了变量,但由于 print 函数没有使用引号,可能会出现一些有趣的结果。如果用来存储一个人的名字的变量是 name,那么就不可能打印输出 Your name is [name],因为 name 的第一次使用(本意是字符串)和第二次使用(是变量)都被解释为变量。如果将 name 设置为(isJohn Doe,那么 print Your name is name. 的输出就会是 Your John Doe is John Doe。虽然这听起来很奇怪,但这是一个引入变量概念的好方法,这恰好是第 3 关中增加的一个功能。

第 3 关要求在字符串周围加引号,这使得变量的功能就像在 Python 中一样。现在可以输出与变量相结合的字符串,做出复杂的语句,而不用担心变量名和字符串中的单词之间的冲突。这个级别取消了 “回传”(echo)函数,这看起来确实是一个可能会让一些学习者感到沮丧的东西。他们应该使用变量,这是更好的代码,但如果一个 ask/echo 代码块变成无效语法,可能会让人感到困惑。

第 4 关增加了基本的 if/else 功能。学生可以从简单的问/答代码转向复杂的交互。例如,一个问“你最喜欢的颜色是什么?”的提示可以根据用户输入的内容接受不同的回复。如果他们输入绿色,回答可以是“绿色!这也是我最喜欢的颜色。”如果他们输入其他的东西,回复可以是不同的。if/else 块是一个基本的编程概念,Hedy 引入了这个概念,而不必担心复杂的语法或过于精确的格式。

第 5 关有一个 repeat 函数,在现有的功能上增加了一个基本的循环。这个循环只能多次重复同一个命令,所以它没有 Python 中的循环那么强大,但它让学生习惯了重复命令的一般概念。这是多介绍了一个编程概念,而不会用无谓的复杂来拖累。学生们可以先掌握概念的基础知识,然后再继续学习同一事物的更强大、更复杂的版本。

在第 6 关,Hedy 现在可以进行基本的数学计算。加法、减法、乘法和除法都支持,但更高级的数学功能不支持。不能使用指数、模数或其他任何 Python 和其他语言能处理的东西。目前,Hedy 还没有更高关卡的产品增加更复杂的数学功能。

第 7 关引入了 Python 风格的缩进,这意味着 repeat 可以处理多行代码。学生在这之前都是逐行处理代码,但现在他们可以处理代码块。这个 Hedy 关卡与非教学型编程语言能做的事情相比还是有很大的差距,但它可以教会学生很多东西。

开始学习 Hedy 最简单的方法是访问 Hedy 网站上的 课程,目前有荷兰语、英语、法语、德语、葡萄牙语和西班牙语。这样一来,任何有网页浏览器的人都可以进入学习过程。也可以从 GitHub 下载 Hedy,并从命令行运行解释器,或者运行 Hedy 网站的本地副本及其交互式课程。基于网页的版本更容易使用,但网页版本和命令行版本都支持运行针对不同复杂程度的 Hedy 程序。

Hedy 永远不会与 Python、C++ 或其他语言竞争,成为现实世界项目编码的首选语言,但它是编码教学的绝佳方式。作为学习过程的一部分,学生编写的程序是真实的,甚至可能是复杂的。Hedy 可以促进学生的学习和创造力,而不会让学生在学习过程中过早地被过多的信息所迷惑。就像数学课一样,在进入微积分之前很久要从学习计数、相加等开始(这个过程需要数年时间),编程也不必一开始就对编程语言的语法问题“我稍后再解释”、精确地遵循这些语法问题,才能产生哪怕是最基本的语言程序。


via: https://opensource.com/article/21/4/hedy-teach-code

作者:Joshua Allen Holm 选题:lujun9972 译者:wxy 校对:wxy

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

了解如何在 Bash 中编写定制程序以自动执行重复性操作任务。

 title=

Unix 最初的希望之一是,让计算机的日常用户能够微调其计算机,以适应其独特的工作风格。几十年来,人们对计算机定制的期望已经降低,许多用户认为他们的应用程序和网站的集合就是他们的 “定制环境”。原因之一是许多操作系统的组件未不开源,普通用户无法使用其源代码。

但是对于 Linux 用户而言,定制程序是可以实现的,因为整个系统都围绕着可通过终端使用的命令啦进行的。终端不仅是用于快速命令或深入排除故障的界面;也是一个脚本环境,可以通过为你处理日常任务来减少你的工作量。

如何学习编程

如果你以前从未进行过任何编程,可能面临考虑两个不同的挑战:一个是了解怎样编写代码,另一个是了解要编写什么代码。你可以学习 语法,但是如果你不知道 语言 中有哪些可用的关键字,你将无法继续。在实践中,要同时开始学习这两个概念,是因为如果没有关键字的堆砌就无法学习语法,因此,最初你要使用基本命令和基本编程结构来编写简单的任务。一旦熟悉了基础知识,就可以探索更多编程语言的内容,从而使你的程序能够做越来越重要的事情。

Bash 中,你使用的大多数 关键字 是 Linux 命令。 语法 就是 Bash。如果你已经频繁地使用过了 Bash,则向 Bash 编程的过渡相对容易。但是,如果你不曾使用过 Bash,你会很高兴地了解到它是一种为清晰和简单而构建的简单语言。

交互设计

有时,学习编程时最难搞清楚的事情就是计算机可以为你做些什么。显然,如果一台计算机可以自己完成你要做的所有操作,那么你就不必再碰计算机了。但是现实是,人类很重要。找到你的计算机可以帮助你的事情的关键是注意到你一周内需要重复执行的任务。计算机特别擅长于重复的任务。

但是,为了能告知计算机为你做某事,你必须知道怎么做。这就是 Bash 擅长的领域:交互式编程。在终端中执行一个动作时,你也在学习如何编写脚本。

例如,我曾经负责将大量 PDF 书籍转换为低墨和友好打印的版本。一种方法是在 PDF 编辑器中打开 PDF,从数百张图像(页面背景和纹理都算作图像)中选择每张图像,删除它们,然后将其保存到新的 PDF中。仅仅是一本书,这样就需要半天时间。

我的第一个想法是学习如何编写 PDF 编辑器脚本,但是经过数天的研究,我找不到可以编写编辑 PDF 应用程序的脚本(除了非常丑陋的鼠标自动化技巧)。因此,我将注意力转向了从终端内找出完成任务的方法。这让我有了几个新发现,包括 GhostScript,它是 PostScript 的开源版本(PDF 基于的打印机语言)。通过使用 GhostScript 处理了几天的任务,我确认这是解决我的问题的方法。

编写基本的脚本来运行命令,只不过是复制我用来从 PDF 中删除图像的命令和选项,并将其粘贴到文本文件中而已。将这个文件作为脚本运行,大概也会产生同样的结果。

向 Bash 脚本传参数

在终端中运行命令与在 Shell 脚本中运行命令之间的区别在于前者是交互式的。在终端中,你可以随时进行调整。例如,如果我刚刚处理 example_1.pdf 并准备处理下一个文档,以适应我的命令,则只需要更改文件名即可。

Shell 脚本不是交互式的。实际上,Shell 脚本 存在的唯一原因是让你不必亲自参与。这就是为什么命令(以及运行它们的 Shell 脚本)会接受参数的原因。

在 Shell 脚本中,有一些预定义的可以反映脚本启动方式的变量。初始变量是 $0,它代表了启动脚本的命令。下一个变量是 $1 ,它表示传递给 Shell 脚本的第一个 “参数”。例如,在命令 echo hello 中,命令 echo$0,,关键字 hello$1,而 world$2

在 Shell 中交互如下所示:

$ echo hello world
hello world

在非交互式 Shell 脚本中,你 可以 以非常直观的方式执行相同的操作。将此文本输入文本文件并将其另存为 hello.sh

echo hello world

执行这个脚本:

$ bash hello.sh
hello world

同样可以,但是并没有利用脚本可以接受输入这一优势。将 hello.sh 更改为:

echo $1

用引号将两个参数组合在一起来运行脚本:

$ bash hello.sh "hello bash"
hello bash

对于我的 PDF 瘦身项目,我真的需要这种非交互性,因为每个 PDF 都花了几分钟来压缩。但是通过创建一个接受我的输入的脚本,我可以一次将几个 PDF 文件全部提交给脚本。该脚本按顺序处理了每个文件,这可能需要半小时或稍长一点时间,但是我可以用半小时来完成其他任务。

流程控制

创建 Bash 脚本是完全可以接受的,从本质上讲,这些脚本是你开始实现需要重复执行任务的准确过程的副本。但是,可以通过控制信息流的方式来使脚本更强大。管理脚本对数据响应的常用方法是:

  • if/then 选择结构语句
  • for 循环结构语句
  • while 循环结构语句
  • case 语句

计算机不是智能的,但是它们擅长比较和分析数据。如果你在脚本中构建一些数据分析,则脚本会变得更加智能。例如,基本的 hello.sh 脚本运行后不管有没有内容都会显示:

$ bash hello.sh foo
foo
$ bash hello.sh

$

如果在没有接收输入的情况下提供帮助消息,将会更加容易使用。如下是一个 if/then 语句,如果你以一种基本的方式使用 Bash,则你可能不知道 Bash 中存在这样的语句。但是编程的一部分是学习语言,通过一些研究,你将了解 if/then 语句:

if [ "$1" = "" ]; then
        echo "syntax: $0 WORD"
        echo "If you provide more than one word, enclose them in quotes."
else
        echo "$1"
fi

运行新版本的 hello.sh 输出如下:

$ bash hello.sh
syntax: hello.sh WORD
If you provide more than one word, enclose them in quotes.
$ bash hello.sh "hello world"
hello world

利用脚本工作

无论你是从 PDF 文件中查找要删除的图像,还是要管理混乱的下载文件夹,抑或要创建和提供 Kubernetes 镜像,学习编写 Bash 脚本都需要先使用 Bash,然后学习如何将这些脚本从仅仅是一个命令列表变成响应输入的东西。通常这是一个发现的过程:你一定会找到新的 Linux 命令来执行你从未想象过可以通过文本命令执行的任务,你会发现 Bash 的新功能,使你的脚本可以适应所有你希望它们运行的不同方式。

学习这些技巧的一种方法是阅读其他人的脚本。了解人们如何在其系统上自动化死板的命令。看看你熟悉的,并寻找那些陌生事物的更多信息。

另一种方法是下载我们的 Bash 编程入门 电子书。它向你介绍了特定于 Bash 的编程概念,并且通过学习的构造,你可以开始构建自己的命令。当然,它是免费的,并根据 创作共用许可证 进行下载和分发授权,所以今天就来获取它吧。


via: https://opensource.com/article/20/4/bash-programming-guide

作者:Seth Kenlon 选题:lujun9972 译者:stevenzdg988 校对:wxy

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

你是如何在 Linux 上使用 C 编写你的程序的?它确实是非常简单的,由三个简单的步骤组成。

步骤 1: 编写你的 C 程序,并使用一个 .c 的扩展名进行保存。例如,my_program.c

步骤 2: 在一个终端中使用 gcc 编译器来编译程序并生成目标文件,像这样:

gcc -o my_program my_program.c

步骤 3: 在 Linux 中,你可以以运行生成的对象文件的方式来运行你的 C 程序:

./my_program

这只是如何在 Linux 中编译和运行 C 程序的简要总结。假设你是 C 语言或 Linux 系统的新手,我将仔细演示这些步骤,以便你能在 Linux 环境中舒服地编写 C 程序。

事实上,我将讨论如何在 Linux 终端中以及在代码编辑器中运行 C 程序的两种方式。

方法 1: 在 Linux 终端中运行 C 程序

为了在 Linux 中运行一个 C 程序,你需要在你的系统上有一个 C 编译器。最流行的编译器是 gcc GNU 编译器套件 GNU Compiler Collection )。

你可以使用你发行版的软件包管理器来安装 gcc 。在基于 Debian 和 Ubuntu 的 Linux 发行版中,使用 apt 命令:

sudo apt install gcc

切换到保存你的 C 程序的目录(或者提供路径),然后通过编译程序生成对象文件:

gcc -o my_program my_program.c

记住,提供输出对象文件(-o my_program)是可选的。如果你不提供,那么将自动生成一个名称为 a.out 的对象文件。但是这样并不好,因为编译每个 C 程序都会覆盖它,而且你也不知道这个 a.out 对象文件究竟属于哪个程序。

在你的对象文件生成后,运行它来运行 C 程序。它已经能够执行了。像这样简单地使用它:

./my_program

接下来,如果你的程序是正确的,它将显示出你所期望的输出。正如你所看到的,这和 在 Linux 中运行 C++ 程序 没什么不同。

每更改一次你的程序,你都必须先重新编译它,然后再次运行生成的对象文件来运行这个新的 C 程序。

方法 2: 如何在 Linux 中使用一个诸如 VSCode 之类的代码编辑器来运行 C 程序

并不是每一个人都能适应命令行和终端,我完全理解这一点。

你可以使用一个诸如 Eclipse 或 Code Blocks 之类的真正的 C/C++ IDE ,但是它们是很重量级的程序,通常更适合于大型的项目。

我建议使用一个开源的代码编辑器,像 VSCode 或 Atom 。它们基本上是文本编辑器,但是你可以通过安装附加组件来直接在图形化的代码编辑器中编译和运行程序。

在这个示例中,我使用 VSCode 编辑器。它是一个来自微软的 非常流行的开源的代码编辑器

首先,在 Ubuntu 的 软件中心中安装 VSCode 。对于其它发行版来说,请检查你的 Linux 发行版的软件包管理器或软件中心。你可以参看它的官方网站来查看更多的信息。

启动 VSCode ,打开或创建一个工程,在这里创建你的 C 程序。我使用一个简单的 Hello World 程序作为示例。

你必须确保你已经在你的 Linux 系统上安装了 gcc 编译器。

sudo apt install gcc

接下来你要做的事是使用一个允许你运行 C 代码的扩展。微软可能会提示你安装它的 C/C++ 程序扩展,但它的设置很复杂,因此我不推荐。

相反,我建议你使用 Code Runner 扩展。它是一个简单直接的扩展,你可以在不使用额外配置的情况下轻松地运行 C 和 C++ 代码。

转到扩展标签页,在其中搜索和安装 “Code Runner” 。

安装 Code Runner 扩展来运行 C/C++ 程序

重新启动 VSCode 。现在,你能够使用下面方法中的其中一个来运行 C 代码:

  • 使用快捷键 Ctrl+Alt+N
  • 按下 F1 ,接下来选择或输入 “Run Code” 。
  • 在文本编辑器中右键单击,从上下文菜单中单击 “Run code” 。

右键单击程序文件,然后选择 Run Code

当你运行这个 C 程序时,它将会被自动编译和运行。你可以在编辑器底部打开的终端中看到输出。还有比这更好的事情吗?

程序输出显示在编辑器的底部

你更喜欢哪一种方法?

在 Linux 命令行中运行一些 C 程序是没有问题的,但是使用一个代码编辑器会更容易一些,而且会节省时间。你不觉得吗?

你可以自己决定想使用哪一种方法。


via: https://itsfoss.com/run-c-program-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:robsean 校对:wxy

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

来自 Intel、MIT 和佐治亚理工学院的研究人员正在研究一个 AI 引擎,它可以分析代码的相似性,以确定代码的实际作用,为自动化软件编写奠定了基础。

随着人工智能(AI)的快速发展,我们是否会进入计算机智能到足以编写自己的代码并和人类一起完成工作?新的研究表明,我们可能正在接近这个里程碑。

来自 MIT 和佐治亚理工学院的研究人员与 Intel 合作开发了一个人工智能引擎,被称为机器推断代码相似性(MISIM),它旨在分析软件代码并确定它与其他代码的相似性。最有趣的是,该系统有学习代码的潜力,然后利用这种智能来改变软件的编写方式。最终,人们可以解释希望程序做什么,然后机器编程(MP)系统可以拿出一个已经编写完的应用。

Intel 首席科学家兼机器编程研究总监/创始人 Justin Gottschlich 在该公司的新闻稿中说:“当完全实现时,MP 能让每个人都能以任何最适合自己的方式 —— 无论是代码、自然语言还是其他东西 —— 来表达自己的意图以创建软件。这是一个大胆的目标,虽然还有很多工作要做,但 MISIM 是朝着这个目标迈出的坚实一步。”

它是如何工作的

Intel 解释说,神经网络“根据它们被设计执行的作业”给代码片段打出相似度分数。例如,两个代码样本可能看起来完全不同,但由于它们执行相同的功能,因此被评为相同。然后,该算法可以确定哪个代码片段更有效率。

例如,代码相似性系统的原始版本被用于抄袭检测。然而,有了 MISIM,该算法会查看代码块,并试图根据上下文确定这些代码段是否具有相似的特征,或者是否有相似的目标。然后,它可以提供性能方面的改进,例如说,总体效率的改进。

MISIM 的关键是创造者的意图,它标志着向基于意图的编程的进步,它可以使软件的设计基于非程序员创造者想要实现的目标。通过基于意图的编程,算法会借助于一个开源代码池,而不是依靠传统的、手工的方法,编译一系列类似于步骤的编程指令,逐行告诉计算机如何做某件事。

Intel 解释说:“MISIM 与现有代码相似性系统的核心区别在于其新颖的上下文感知语义结构 (CASS),其目的是将代码的实际作用提炼出来。与其他现有的方法不同,CASS 可以根据特定的上下文进行配置,使其能够捕捉到更高层次的代码描述信息。CASS 可以更具体地洞察代码的作用,而不是它是如何做的。”

这是在没有编译器(编程中的一个阶段,将人类可读代码转换为计算机程序)的情况下完成的。方便的是,可以执行部分片段,只是为了看看那段代码中会发生什么。另外,该系统摆脱了软件开发中一些比较繁琐的部分,比如逐行查找错误。更多细节可以在该小组的论文(PDF)中找到。

Intel 表示,该团队的 MISIM 系统比之前的代码相似性系统识别相似代码的准确率高 40 倍。

一个 Redditor,Heres\_your\_sign 对 MISIM 报道的评论中有趣地指出,幸好计算机不写需求。这位 Redditor 认为,那是自找麻烦。


via: https://www.networkworld.com/article/3570389/ai-system-analyzes-code-similarities-makes-progress-toward-automated-coding.html

作者:Patrick Nelson 选题:lujun9972 译者:geekpi 校对:wxy

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

Facebook 的 TransCoder AI 可在 Java、Python 和 C++ 之间转换代码

该系统可以将代码从一种高级编程语言(如 C++、Java 和 Python)转换为另一种。它采用了一种无监督的学习方法,从而在没有标签的情况下在数据集中找到未检测到的模式,比基于规则数据集的模型要高效得多。无论使用哪种编程语言,神经编译器都可以将代表相同指令的代码段映射到相同代码段。这是 AI 从以下位置转换代码时获得的结果的准确性水平:C++ to Java: 74.8%;C++ to Python: 67.2%;Java to C++: 91.6%;Java to Python: 68.7%;Python to Java: 56.1%;Python to C++: 57.8%。

来源:开源中国

硬核老王点评:离编程由 AI 完成越来越近了。程序员们失业的时间可能不远了——尤其是初级的程序员。

DebConf20 将于 8 月 23 - 29 在线上举行

今年的会议原定在海法举行,所以现在整个日程表被推后一年。换句话说,虽然 2020 年的会议将在线上举行,但 2021 年的会议地点将在海法举行,随后是 2022 年的科索沃和 2023 年的印度高知。

来源: softpedia

硬核老王点评:我觉得,即便全球疫情会减缓,各类技术大会或许也应该认真考虑将来的大会都在线上举行的问题。

Linus Torvalds 宣布庞大的 Linux 内核 5.8

虽然 5.8 并没有什么特别的亮点,但这是一个庞大的版本,主要是因为更新中发生了大量的变化,包括一些有关驱动程序的变化。Torvalds 表示,这是 4.9 以来最大的版本之一。5.8 的第一个候选版本(rc1)已经发布,有超过 14000 个文件被修改,14000 个非合并提交,以及大约 80 万行新内容。“从 rc1 开始,它就和 4.9 不相上下了,在提交数量上,4.9 是我们最大的版本。是的,5.8-rc1 比 4.9-rc1 少了几个提交,但在很多方面,它是一个更全面的版本,”Torvalds 解释说,“4.9 内核被人为地放大了,部分原因是该版本中合并了 greybus 子系统,但也因为 4.8 有一个较长的 rc 系列,因此有更多的积压开发。在 5.8 中,我们并没有发现这类使版本变大的迹象,只是单纯的有很多开发成果在里面。”

来源:softpedia

硬核老王点评:Linux 内核已经是最复杂、最庞大的软件工程之一了,不知道巨大化之后的未来会是怎么样的,怀念早些年的小内核。

Twitter CEO:自动化会甚至会对编程工作构成威胁

Twitter CEO Jack Dorsey 表示,“机器学习和深度学习的许多目标是随着时间的发展编写软件本身,因此许多初级级编程工作将不再那么重要了,”

来源:新浪科技

硬核老王点评:毕竟“初级”编程工作也是要被取代的初级工种之一。

多个 DNS 解析程序漏洞允许攻击者发动拒绝服务攻击

该漏洞被称为 NXNSAttack。DNS 解析程序不能向“名字”发送域名查询,因此解析器首先需要获得权威 DNS 服务器的 IPv4 或 IPv6 地址,之后才能继续查询域名。NXNSAttack 就是基于这一原理,攻击者发送的委托包含了假的权威服务器名字,指向受害者的 DNS 服务器,迫使解析程序对受害者的 DNS 服务器生成查询。一次查询会被放大数十次乃至数百次,对受害者服务器发动了拒绝服务攻击。众多 DNS 软件都受到影响,其中包括 BIND、 Unbound、PowerDNS、Cloudflare、Google、Amazon、Microsoft、Oracle(DYN)、Verisign、IBM Quad9 和 ICANN。

来源:solidot

硬核老王点评:互联网建设和设计之初,并没有考虑到这么复杂的安全隐患,或者说考虑到了在当时也只能暂时忽视。随着互联网的发展,这种早期的协议上的漏洞会逐一被发现、修补和迭代。

GNOME 基金会和 RPI 的专利诉讼案达成和解

去年 9 月,Rothschild Patent Imaging LLC(RPI)的公司对 GNOME 基金会提起了专利侵权诉讼,指控 GNOME 桌面环境项目中的一个组件 Shotwell 照片管理器侵犯了它于 2008 年申请的专利,该专利描述了无线连接图像捕捉设备和接收设备的系统和方法。现在,GNOME 与 RPI 达成和解,RPI 并承诺不再对 GNOME 提起任何专利诉讼。此外,RPI 和 Leigh Rothschild 的专利免除和承诺覆盖了在 OSI 批准的所有开源许可证下发布的软件。

来源:solidot

硬核老王点评:妄想从开源社区/开源组织身上咬下一块肉,先要看看是否能承受社会压力。

安全研究人员分析过去几年发生的开源软件供应链攻击

软件供应链攻击有两类:其一是在软件产品中植入恶意代码去感染终端用户,此类攻击的一个例子是 CCleaner 的恶意版本通过官网传播给终端用户,它在长达一个多月时间里被下载了 230 万次。另一类软件供应链攻击是向软件产品的依赖包植入恶意代码。随着开源软件开发模式的流行,此类的攻击日益常见。研究人员分析了 npm、PyPI 和 RubyGems 软件包管理系统发现的 174 个恶意依赖包,他们发现 56% 的软件包在安装时触发恶意行为,41% 使用额外的条件去判断是否运行。61% 的恶意软件包利用了名字相似性向开源生态系统植入恶意包。攻击者的主要目的是析取数据。

来源:solidot

硬核老王点评:开源软件本身这个模式并不能决定是否安全,只是给用户一个安全的可能性。所以,在享受开源软件的福利时,其带来的可能的隐患也需要重视,并可能付出不菲的成本和代价。

微软开源 1983 年的 GW-BASIC

微软在历史参考和教育目的的名义下开源了 1983 年的 GW-BASIC,源代码托管在 GitHub 上,采用 MIT 许可证。微软表示他们不接受修改任何代码的 PR 请求。GW-BASIC 是源自 IBM Advanced BASIC/BASICA 的 BASIC 解释器。微软不同的 BASIC 实现都可以上溯到比尔盖茨和保罗艾伦完成的微软首个产品:Altair 8800 BASIC 解释器。和 70/80 年代的众多软件一样,GW-BASIC 的源代码是百分之百的汇编语言。

来源:solidot

硬核老王点评:反正放家里也是烂着,就当成古董给大家把玩吧。