---
title: 开源软件不是可随时关闭的服务
date: '2018-04-20 18:23:22'
draft: false
summary: 把开源软件和依赖授权的商业服务混为一谈，会夸大“被卡脖子”时的风险判断；开源代码的分发和使用，天然比封闭服务更难被一纸行政命令直接掐断。
slug: open-source-cannot-be-switched-off-like-a-service
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/GcZ4id9C8
tags:
- open-source
- android
- software-freedom
- policy
topics:
- software-engineering
type: post
---

很多人讨论技术封锁时，喜欢把开源软件和商业服务混在一起讲，仿佛只要某家公司被制裁，`Android`、`TensorFlow`、`MySQL`、`Hadoop` 这类东西也会一起被“关掉”。

我一直觉得，这里面有个很根本的概念混淆：

开源软件不是一种随时可以被后台关停的托管服务。

以 `Android` 为例，真正需要授权的，主要是 `Google` 的那套商业服务和生态能力，比如 `Gmail`、`Map`、搜索以及相关移动服务框架。而 `Android` 作为开源系统本身，并不是说某个行政机构一句话就能让源码突然失效。

这两件事差别非常大。

- 服务可以被停止提供
- 授权可以被取消
- 但开源代码不会因此从世界上消失

源码一旦公开，它本质上就是一种文本。历史上关于 `PGP` 出口限制的诉讼，已经把这件事推到过很高的法律层面：代码不仅是软件，也是一种表达形式。

所以你可以卡某些商业发行渠道，卡某些二进制分发方式，卡某些品牌授权，但很难像关停一个云服务那样，直接把一个开源软件“从世界上关掉”。

哪怕退一步说，真限制了某个官方二进制版本的分发，用代码重新构建、重新打包、重新分发，在技术上也根本不是同一难度级别的问题。

所以我会觉得，真正应该区分的是：

- 哪些是开源基础设施
- 哪些是附着在开源之上的商业服务
- 哪些是你真正会在业务上被依赖锁死的环节

如果这三层不分开，大家就很容易把对商业服务依赖的风险，错误地外推成“所有开源软件都可能一夜之间不能用”。

这会把问题说得过于戏剧化，反而不利于做准确判断。
