2016年10月

UbuntuFun.de 的 Marius Quabeck 开发了一个名为 magic-device-tool 的新工具,可以使用它在你的手机上轻松地安装 Ubuntu Touch 移动操作系统。这个工具刚刚发布了第一个稳定版本 magic-device-tool 1.0,现在任何人都可以用它将 Ubuntu Touch OS 安装到自己的设备上了,除此以外,也可以通过它来安装 Android、Cyanogenmod 或 Phoenix OS。

也就是说,你现在可以替换你的移动设备上的操作系统,无论是最新的 Ubuntu Touch OS、Cyanogenmod(GAPPS 有或没有)、原厂 Android 镜像,以及 Phoenix OS ,都可以在这个批处理工具的帮助下安装到你的移动设备上。不过要注意的是,你仅能运行上述的操作系统之一,当然你可以再次刷机。

所支持的设备

不是每种设备都能支持,这里是它所测试成功的设备:BQ Aquaris E4.5、 BQ Aquaris E5 HD、 BQ Aquaris M10 HD、 BQ Aquaris M10 FHD、 魅族 MX 4、 魅族 Pro 5、 LG Nexus 4、 LG Nexus 5、 Asus Nexus 7 2013 WiFi、 Asus Nexus 7 2013 LTE、 Asus Nexus 7 2012 3G、 三星 Nexus 10、 一加 One、以及 Fairphone 2 (FP2)。如果你在其它的设备上测试成功,欢迎反馈给作者。

这个工具也可以用于为你的设备创建备份、恢复备份,锁定或解锁 bootloader,安装 TWRP 恢复程序。

想试试吗?请使用如下命令从 GitHub 获取最新的版本并运行它,需要注意的是,它仅在 Ubuntu 16.04 和 Ubunut 16.10 下成功运行:

git clone https://github.com/MariusQuabeck/magic-device-tool.git
cd magic-device-tool
chmod +x launcher.sh
./launcher.sh

请观看视频:

刷机成功后,请来分享你的经验吧。

随着像 APT 和 Yum 等传统包管理解决方案渐渐老去,并且不适用于嵌入式和 IoT 等 Linux 的大量新兴领域,新一代的基于原子化的 Linux 软件升级方案应运而生。Konsulko Group 的 Matt Porter 在本周的 2016 年欧洲嵌入式 Linux 峰会(LCTT 译注:于 2016 年 10 月 11-13 日在德国柏林召开)为大家对比了这些新技术的不同点。

目前已有多个 Linux 软件商使用增量原子更新方式来传递更可靠的发行版更新,通过二进制差异实现更小体积的更新,假如出现意外状况也运行回退。这些新的发行版升级机制包含了 SWUpdate、Mender、OSTree 和 swupd。但有趣的是,幻灯片之中并没有提及 Ubuntu 的 Snappy。

SWUpdate 一种单/双镜像的模块化升级框架,支持镜像签名、可以使用 Kconfig 来进行配置、能够处理本地或者远程升级等。SWUpdate 简直就是为嵌入式系统设计的。

Mender 则是以无线传输进行升级位目标的升级方案。它是用 Go 编程语言编写的双镜像升级框架。

OSTree 是此次增量原子升级方案演示中最有名气的,它类似于 Git。Fedora 和 RedHat 都有它的身影,甚至 Gnome 的 Flatpak 容器系统也使用了 OSTree。

Swupd 是最后展示的一个升级系统,是由 Intel 的 Clear Linux 发行版率先使用的升级方案。它的代码放在 GitHub,而它的客户端和服务端则由 Clear Linux 托管。Swupd 与 OSTree 相似,但它不必重启就可以启用更新。

而那些在本次柏林召开的欧洲嵌入式 Linux 峰会中没有提及的,你也可以访问 这些 PDF 讲演稿 来了解这些专注于嵌入式 Linux 的软件更新机制。


via: http://phoronix.com/scan.php?page=news_item&px=ELC2016-Software-Updates

作者:Michael Larabel 译者:GHLandy 校对:wxy

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

Rust 是什么?

Rust 是一种系统编程语言,它运行速度惊人,并且可以避免几乎所有的崩溃、内存区块错误 以及数据竞争。你也许会质疑为什么我们还需要又一种这样的语言,因为已经有很多同类的语言了。这篇文章将会告诉你为什么。

安全性 vs. 控制权

你也许见过上面的图谱。一边是 C/C++,对运行的硬件拥有更多的控制权,因此它可以让开发者通过对所生成的机器代码进行更精细的控制来优化性能。然而这不是很安全,这很容易造成内存区块错误以及像 心血漏洞 这样的安全漏洞。

另一边是像 Python、Ruby 和 JavaScript 这种没有给予开发者多少控制权但是可以创建出更安全的代码的语言。虽然这些代码可以生成相当安全并且可控的异常,但是它们不会造成内存区块错误。

在图谱中间的区域是 Java 和一些其它混合了这些特性的语言。它们提供对运行的硬件部分控制权,并且尝试尽量减少漏洞的出现。

Rust 有点不太一样,它并没有出现在这个图谱上。它同时提供给开发者安全性和控制权。

Rust 的特性

Rust 是一种像 C/C++ 一样的系统编程语言,除此之外它还给予开发者对内存分配细粒度的控制。它不需要垃圾回收器。它的 运行环境 runtime 很小,运行速度接近于在裸机上的运行。它为开发者提供了代码性能更大的保证。此外,任何了解 C/C++ 的人都能读懂以及编写 Rust 的代码。

Rust 的运行速度非常快,因为它是一种编译语言。它使用 LLVM 作为编译器的后端,并且还可以利用一大堆优化。在许多领域,它的性能都要高于 C/C++。它像 JavaScript、Ruby 和 Python 一样,与生俱来就是安全的,这意味着它们不会造成内存区块错误、 野指针 dangling pointers 或者 空指针 null pointers

另外一个很重要的特性就是消除数据竞争。如今,大多数计算机都具有多个核心,许多线程并发运行。然而,开发者很难编写好的并行代码,因此这个特性除去了他们的后顾之忧。Rust 使用两个关键概念来消除数据竞争:

  • 所有权 Ownership 。每一个变量都被移动到一个新的位置,并防止通过先前的位置来引用它。每一个数据块只有一个所有者。
  • 借用 Borrowing 。被拥有的值可以借用,以允许在一段时间内使用。

在 Fedora 24 和 25 上使用 Rust

若要开始使用,只需安装软件包:

sudo dnf install rust

示例代码 helloworld.rs

fn main() {
    println!("Hello, Rust is running on Fedora 25 Alpha!");
}

编译并执行:

rustc helloworld.rs
./helloworld

在 Fedora 上可以执行以下命令来安装最新的测试版本:

sudo dnf --enablerepo=updates-testing --refresh --best install rust

via: https://fedoramagazine.org/rust-meets-fedora/

作者:Sumantro Mukherjee 译者:OneNewLife 校对:wxy

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

使用过 GitHub 的人大多知道它上面有个“Fork”的功能,用来将某个仓库克隆到你的账户之下,从而可以对其进行修改、衍生,也可以比较方便的将你的修改推回到原来的仓库(所谓的上游)。

随着 GitHub 的流行,我们经常能在各种文章中见到,“fork 某某项目”等说法,是的,“fork”这个一直没有一个正式的译名。

其实这个问题不独出现在 GitHub 中,fork 这个词更早的出现在 Unix/Linux 中的 C 语言编程之中。在 Unix/Linux 的进程模型中,fork 是指进程创建自身副本的操作,它通常是一个在内核中实现的系统调用。fork 是 Unix 类系统中进程创建的主要方式(历史上曾经是唯一的方式)。从那个时候起,fork 就一直没有一个确定的译名。

不过,我们认为,对于这样的一个经常使用的专业名词,有一个明确的译名比较适合,虽然大家都习惯了直接用 fork 一词。

fork 一词在英文中的原意是“叉子”, 虽然翻译成“分叉”、“分支”似乎也可以,但是前者较少用做动词,后者则和 Branch 的译名重复混淆。

据 Linux 中国翻译组(LCTT)的译者 dongfengweixiao 提议,可译作“复刻”,我们认为这是一个可取的译法,一方面照顾到了音译,另一方面其释义也形象直观。

补充 1,“复刻”这样的译法,在网络上已存在,包括中文维基)中也采用该译法,只是并未得到公认和流行。

补充 2,据 @爱开源魅影 称,git 软件包里面,蒋新将“fork”译为“派生”。似也可取。

既然说到这里,顺便我们对 复刻 fork 做一个技术方面的简介吧。

复刻 fork GitHub 仓库

在 GitHub 上评价一个项目(仓库)是否流行,其中一个重要指标就是其 复刻 fork 数。

在 GitHub 上参与一个开源项目的程度有三个阶段:

  • star(点赞),如果你觉得某个项目不错,可以为其点赞(star)
  • watch(关注),如果你希望进一步关注这个项目的进展,可以关注(watch)它
  • fork(复刻),如果你还想进一步为这个项目做一些贡献,可以复刻(fork)它到你自己的账户下,做出了修改之后通过 Pull-Request(PR)方式将你的改动推回给原仓库(上游),如果被接纳就会进入到原仓库之中

显然,一个项目的复刻数越高,代表着贡献者越多。

通过 复刻 fork + PR 的方式对开源项目进行贡献的流程类似下图:

我们知道 GitHub 是运行在 Git 之上的,GitHub 中的 复刻 fork 其本质上是 Git 中的 克隆 clone 。关于 GitHub 中的复刻的进一步介绍,可以参考“在 Github 和 Git 上 fork 之简单指南”一文。

顺便说一句,我们的 LCTT 翻译组就是通过 复刻 fork + PR 的方式运作的,这也是 GitHub 上绝大多数开源项目的运作方式。

复刻 fork 子进程

在 Unix 下的 C 语言编程中,通过 fork() 系统调用来对进程本身进行复制,然后被复制出来的子进程就可以执行不同于父进程的操作,或通过 exec() 运行其它进程。典型的 C 代码如下:

fpid = fork();   

if (fpid < 0)   
    printf("error in fork!");   
else if (fpid == 0) {  
    printf("i am the child process, my process id is %d/n",getpid());   
} else {  
    printf("i am the parent process, my process id is %d/n",getpid());   
}

所有的服务器守护进程,包括你所见到的 Web 服务、MySQL 数据库服务等,都是通过这种方式来产生子进程来提供服务的。甚至,整个 Linux/Unix 中的进程,除了 init 进程本身之外,都是由 init 进程 复刻 fork 出来的。关于服务器编程方面的 复刻 fork 的使用,可以进一步参阅“搭个 Web 服务器(三)”一文。

复刻 fork 炸弹

其实,不只是 C 语言里面有 复刻 fork 的功能,在 shell 里面也有,想必大家可能都听说过 “fork 炸弹”,这就是利用函数的迭代执行,无限 复刻 fork 出许多子进程,从而耗尽系统资源,导致系统崩溃的一个恶意(玩笑)用法。

复刻炸弹有很多种形式,不过最简洁的可能就是如上图的这个了,关于这个炸弹的具体解释,可以参阅“经典的 Fork 炸弹解析”,在此就不赘述了。

如果你对 fork 的翻译有不同的意见,欢迎留言评论。

开源软件让谷歌可以快速而有效地构建系统而不用重复造轮子,可以让我们专注于解决新问题。我们站在巨人的肩膀上,因此我们熟谙这一切。这就是为什么我们支持开源,而且让谷歌人可以轻松地将他们内部开发的项目以开源方式发布的原因。

今天,我们发布了我们的第一个开源成绩单,展示我们最流行的项目、分享一些数据,并介绍一些我们在 2016 年发布的项目细节。

迄今为止,我们已经开源了超过 2 千万行的代码,你可以在我们的网站上找到我们最知名的项目的列表,下面是其中的一些:

  • Android - 用于移动设备的软件族,包括操作系统、中间件和关键性应用。
  • Chromium - 它包括 Google Chrome 浏览器背后的 Chromium 软件和 Google Chrome OS 设备背后的 Chromium OS 软件。
  • Angular - 一个 JavaScript 和 Dart 的 web 应用框架,关注于开发者的生产力、开发速度和测试能力。
  • TensorFlow - 一个使用 数据流图 data flow graphics 的数字计算库,支持从数据中心到嵌入式设备的跨平台的大规模机器学习。
  • Go - 一种静态类型的编译型编程语言,富有表现力、简洁而高效。
  • Kubernetes - 一个可以自动分发、操作和缩放的容器化应用系统。
  • Polymer - 一个构建于 Web 组件 API 之上的轻量级库,用于构建在 Web 应用中可重用的封装元素。
  • Protobuf - 一个可扩展的、语言无关和平台无关的串行化结构数据的机制。
  • Guava - 一套 Java 核心库,包括新的集合类型(比如 multimap 和 multiset)、 不可变集合 immutable collections 、知识图谱库、 函数类型 functional types 、内存缓存,以及并发 API/功能、I/O、哈希、 基类型 primitives 、反射、字符串处理等等。
  • Yeoman - 一个强壮而自足的框架工具集,它包括可以帮助开发者快速构建优美而引人入胜的 Web 应用的库和工作流。

统计谷歌开源的全部软件有点困难,不过我们可以从开源到 GitHub 上这部分软件获取一些有趣数据。现在谷歌在 GitHub 上已经有了 84 个组织和 3499 个项目仓库,而今年就创建了 773 个仓库!

谷歌人使用了从汇编到 XSLT 等等不计其数的各种编程语言,但是哪一个才是我们的最爱?GitHub 可以帮我们找到在这些软件仓库中我们使用最多的编程语言:

  1. JavaScript
  2. Java
  3. C/C++
  4. Go
  5. Python
  6. TypeScript
  7. Dart
  8. PHP
  9. Objective-C
  10. C#

我们可以通过 BigQuery 来了解各种 GitHub 开源数据,比如空格和制表符的使用对比最流行的 Go 语言软件包等等。谷歌人在 GitHub 上的开源项目提交了多少次?我们可以通过搜索 Google.com 的邮件地址来知道谷歌人的最低限度的提交量,比如使用这样的查询:

SELECT count(*) as n
FROM [bigquery-public-data:github_repos.commits]
WHERE committer.date > '2016-01-01 00:00'
AND REGEXP_EXTRACT(author.email, r'.*@(.*)') = 'google.com'

用上面的查询,我们发现从今年开始,谷歌人在 GitHub 上的开源项目做了 142,527 次提交。这个数据集始于 2011 年,如果从那时开始统计,那么提交次数是 719,012。不过,这只是最低限度的数据,因为我们没有统计谷歌人使用其它邮件地址的提交。

让我们来看看 2016 年有哪些令人激动的地方。我们发布了开源软件硬件数据集,今年发布的有这些:

Seesaw

Seesaw 是一个基于 Linux 虚拟服务器(LVS)的负载平衡平台,是由我们的 SRE 工程师用 Go 语言开发的。就像其它的项目一样,它也是为了解决我们切身之痒而产生的。

在我们发布它的公告中提到:“我们需要有为 单播 unicast 选播 anycast VIP 控制流量的能力,也需要对 NAT 和 DSR(也叫 DR)进行负载平衡,以及针对后端进行足够的健康检查。所有这些我们需要一个可以让我们轻松地管理的平台,包括自动分发改变的配置。”

供应商安全评估调查表 Vendor Security Assessment Questionnaire (VSAQ)

每年我们需要评估几百个供应商的安全情况,并且我们开发了一个流程来通过 VSAQ 自动化许多初始信息的收集。许多供应商发现我们的评估表直观而灵活,所以我们决定把它分享出来。VSAQ 框架包括可扩展的调查表模版,覆盖了 Web 应用、隐私程序、基础架构以及物理和数据中心安全。你可以在我们的发布公告中了解更多信息。

OpenThread

OpenThread 是由 Nest 发布的一个 Thread 协议的完整实现,用于家庭连接设备。它非常重要,这是由于这个领域如我们所见是非常碎片化的。OpenThread 的开发得到了 ARM、微软、高通、德州仪器等主要厂商的支持。

Magenta

我们可以使用机器学习来创建吸引人的艺术和音乐吗?这个问题的答案就是动画 Magenta,这个项目来自于谷歌大脑团队,基于 TensorFlow。它有助于推动机器智能在音乐和艺术创作中的发展,并为艺术家、程序员和机器学习研究人员构建了一个协作社区。阅读它的发布公告了解更多信息。

Omnitone

虚拟现实(VR)如果没有 空域音频 spatial audio 还做不到身临其境,而许多的 VR 开发都是在专有平台上进行的。 Omnitone 是一个由 Chrome 团队成员构建的开源库,它可以给该浏览器带来 空域音频 spatial audio 。Omnitone 基于标准的 Web 音频 API 构建,可以提供具有现场感的体验,也被用于类似 WebVR 这样的伴生项目。阅读该项目的发布公告了解更多信息。

科学日报 Science Journal

当今的智能电话带有许多传感器,可以告诉我们周围很多有趣的信息。我们启动科学日报项目,以帮助教育工作者、学生和科学爱好者们利用这些传感器。更多信息可以参阅我们的发布公告

Cartographer

Cartographer 是一个以 2D 和 3D 方式即时定位与地图构建(SLAM)的库,支持 机器人操作系统 Robot Operating System (ROS)。它合并了多种传感器的数据,这个库可以计算位置和地图表面。这是自动驾驶汽车、UAV 和机器人的关键因素,并在室内地图方面做了很多努力。关于 Cartographer 的更多信息可以参阅其发布公告

这只是我们今年发布的一小部分例子,请继续关注谷歌开源博客,为谷歌的开源软件、硬件和数据而欢呼吧。

Chromium 没有你想象的自由

UnGoogled Chromium 是一个 Chromium 浏览器的定制版本,但是不包括任何 Google 服务或功能。它不是一个 Google 的 Chrome 版本,而是一个 Chromium 版本——这是 Chrome、Vivaldi 和 Opera 等浏览器的开源代码母本。

虽然 Chromium 是一个开源项目,但是一直处于 Google 的影响之下,它的大多数贡献者都是 Google 工程师,因此 Chromium 的许多功能都包括了 Google 特有的服务。比如说,Chromium 预配置的搜索引擎是 Google、使用 Google 的 Safe Browsing API 来扫描每个你访问的 URL 的安全性,而且加载了一大堆的 Google 的二进制程序来提供各种内部服务。这意味着,许多用户数据仍然会被发往 Google 的服务器。

从 Chromium 中去除 Google 的部分

一位名为 Eloston 的开发者决定解决这个问题,他分叉了 Chromium 的源代码,并移除了各种 Google 特有的服务。据其说,他移除了 Safe Browsing API、WebRTC、Omnibox 地址栏搜索功能,以及各种 Google 域名下的服务,比如 Google 主机检测器、Google URL 跟踪器、Google 云消息等等。他也移除了 Google 加入其中的所有闭源二进制,这会影响到一些功能,比如 URL 自动格式化(比如地址栏自动隐藏 https://)。

此外,UnGoogled Chromium 也会强制在新选项卡打开弹窗,并允许用户保存更多 URL 类型的数据。

从截图上,UnGoogled Chromium 和其它的基于 Chromium 的浏览器看起来差不多,但是底层有了不少变化。

下载和源代码

下载地址: https://github.com/Eloston/ungoogled-chromium/releases/latest ,支持 Debian、Ubuntu、Windows、macOS。

源代码:https://github.com/Eloston/ungoogled-chromium