[空想] 改造 FreeBSD 变成移动设备操作系统

2017-08-05 17:56:58 +08:00
 noli
目的:兼有开放性,以及安全性。

FreeBSD 也是一个重要的开源操作系统。
FreeBSD 的 Jail 本身就是一个非常好的操作系统级别的安全基础。

拿 FreeBSD 改造成一个开放型的 另一个 iOS,
搭配 C/C++ Rust Swift ObjC Golang 等等的可生成原生二进制应用的 App

会不会有前景呢
10981 次点击
所在节点    奇思妙想
75 条回复
Shangxin
2017-08-07 00:07:15 +08:00
其实做个玩玩还是可以的,支持
afpro
2017-08-07 06:43:27 +08:00
ubuntu 曾经尝试过 然后嘞
raiz
2017-08-07 09:48:28 +08:00
记得 s60 下载应用时选择机型的列表, 对比安卓的基本机器无关的应用适配能力,区别不在于内核;
内核固然重要,给厂商的利益,给开发者的环境,给用户的入口更加重要,Android 这方面做的很好,即使 Andy Rubin 一开始 以 BSD 为内核开发 Android,我想 Android 的优秀程度应该差不多。
hjc4869
2017-08-07 10:35:18 +08:00
@noli 我的意思是你魔改安卓增强这方面的体验,比如把 island,或者把国产 ROM 的那些专门治国产 app 的功能抄过来,比重新从 0 开始做 BSD based 生态容易一万倍。

把 Linux 上的 cgroup, namespace 引入安卓也比拿 BSD 重新做容易。做出来完全不需要让用户去折腾。
noli
2017-08-07 10:52:35 +08:00
@raiz 区别当然是在于内核吧,Android 一开始就是靠 JAR 的变种 Dex 来磨平 不同机器上的 SDK 差异。学术上来说,Symbian 微内核比 Linux 的宏内核更有适应性。如果 Android 是微内核,那么移植 OS 肯定比今天容易多了,因为适应不同机型直接运行时换驱动就可以了,不用重新编译内核,参考今天的 Windows。

@hjc4869 魔改 Android 改 kernel 似乎比较容易。但是,改的时候要不要兼容各种形形色色的 Android 需求呢?如果不兼容,那你改出来的东西还能叫 Android 吗?重新从 BSD 出发,或许你还可以做 Linux 的驱动兼容层,但同时没有 Android 负担,轻装上阵,反而比 从 Android 出发容易吧——如果容易是指技术难度的话。
hjc4869
2017-08-07 11:07:13 +08:00
@noli 魔改安卓就算最后出来的是不兼容安卓的 OS,也比从 0 开始魔改 BSD 容易啊。万一你魔改的是 BSD,但是客户要求你兼容安卓,那不亏大发了?
gemini767
2017-08-07 11:46:22 +08:00
@lydasia 搞笑呢,Darwin 本身是 Mach 爆改+BSD,而 BSD 本身就是 unix 的延续,都是一家人,发型协议不同还分?
gemini767
2017-08-07 11:51:02 +08:00
@noli 搞系统,系统设计固然很重要,生态才是王道,但是核心是硬件!!你看 Google 不管怎么开源怎么随意,每年一步硬件还是代工,所以感觉手机操作系统,看的其实不是系统设计,而是硬件能力。
permaylau
2017-08-07 11:51:47 +08:00
索尼基于 Freebsd 系统做了 ps4 的主机系统,系统内核和底层不重要,关键是硬件驱动和应用层面的第三方支持,这是最重要的。
zhicheng
2017-08-08 14:13:13 +08:00
如果你面对的市场是消费电子,FreeBSD 并没有任何优势。你也没办法证明 FreeBSD 的安全性比 Linux 更好。你也没有办法说服厂商为你开发一套新的驱动。移动设备的硬件开放程度远不如 PC,BSD 系在 PC 上表现尚不佳。

iOS 基于 FreeBSD,但 iOS 并不是因为基于 FreeBSD 而成功的。如果 iOS 基于 Linux 也一样会成功。消费电子没有人在乎你用的什么内核。

FreeBSD 比较大的优势是许可证商业化更友好,这也是为啥主机厂商用它,但如果本身就是要做一个开放系统,这一点似乎意义并不大。按照 Google 的态度,他们肯定更倾向于 BSD 系,但显然连他们都没办法搞定厂商和开发者。

现代 Linux 是一个非常先进和完善的内核,面向消费电子,需要你改的地方并不多,你也改不出什么竞争力。

所以不要拿个锤子看什么都是钉子。
noli
2017-08-08 16:42:09 +08:00
@hjc4869

虽然我还没付诸实践,但是把 cgroup 这样的东西引入 Android,据我所知 Android 是要大改的,所以兼容 Android 基本上没有意义,还不如抛弃这种有害生态。

本质上 cgroup 并不是一个为安全而设计的内核功能,LXC 才是,但 LXC 实际上已经被弃用了。但是 jail 不一样,jail 从诞生到设计就是为了安全的,搭配 ZFS 的方案已经成熟得很。


@zhicheng 除了第一段,其他你说的我都不同意。

1. iOS 就是因为基于 FreeBSD 才占了很大便宜的。iOS 用 Linux 作为内核的话今天的 iOS 估计连沙盒模型都没有,也不会享受 FreeBSD 稳定的 API 带来的好处。你说 iOS 基于 Linux 也一样会成功,这信口开河有点过了,毕竟 iOS 的成功之处,从商业角度来看,从 App 质量来看,Android 都不是很有优势。

2. Google 用 Android 以及 Android 是一个 Linux,我认为是一个偶然,因为 Android 一开始就是基于 linux 内核。仅此而已。你也没有什么列举理由说明 Android 一开始就只适合用 Linux 内核。“没有人在乎你用什么内核”,这只是普通消费者的无知,来讨论这个话题的都不是普通无知消费者。

3. Linux 的内核很先进很完善? 不敢苟同,epoll kqueue 这种事情上看得出,Linux 内核并不是精心设计而是自然而成的。epoll 在 2.5.4 kernel 引入,时间大概是 2004 年左右; kqueue 在 Freebsd 4.1 引入,大约 2000 年左右;有 4 年时间空隙模仿 kqueue 却出了一个画虎不成反类犬的 API。Linux 社区这样的作风我确实很不感冒,也不觉得先进。

再往大一点说,FreeBSD 上的 Unix 积累比 Linux 深厚多了。Linux 的竞争优势仅仅是开源比较早以及搭上了 GNU 运动的风潮。当然,GPL 也是一个让大公司愿意投入的因素——因为保证了自己的投入不仅仅是为竞争对手做嫁衣。

4. 非要说锤子钉子这种空话就没意思了,什么是锤子什么是钉子你也分得清?
hjc4869
2017-08-08 16:53:01 +08:00
@noli 所以你的意思是系统把每个 app 分到不同 jail 里?
noli
2017-08-08 19:33:57 +08:00
@hjc4869 严格来说是非系统应用,都在一个自己独占的 jail 里面。如果需要支持应用族的概念,可以同一个应用族的 App 放在同一个 jail 里面。应用和应用之间的通信,应用的网络通信,应用的本地存储,都由 jail 来监管。

这是一种比较成熟的管理模型吧。

cgroup 做这个感觉挺麻烦的。
hjc4869
2017-08-08 19:34:57 +08:00
@noli 那么作为一个自由的 OS,是不是要允许用户在 jail 外面运行代码?
zhicheng
2017-08-08 21:43:26 +08:00
@noli Linux 开源并没有 BSD 早。

1, 沙盒这个东西是工程师开发出来的,没有并不等于不能有,这个东西并不难,苹果的人也不是菜鸡。况且 BSD 在 Darwin 系里只是一个子系统,核心思想还是 Mach 微内核系统,所以理论上在这个上面跑 BSD 还是跑 Linux,本身就没有多大关系(最后提供给 User Space 的都是 POSIX )。你说 iOS 成功是因为 BSD 真是完全不敢苟同。
App 质量和 OS 关系不大,这个根本就不用我讲。你不能说跑在 BSD 系统上的 App 就是好,跑在其它系统上的就是垃圾。App 质量取决于开发这个 App 的团队有多用心。

2, Google 用 Linux 原因很简单,Linux 比 BSD 从开发者数量到工具链等更成熟,这和他们为什么选 Java 一样。Google 的人不喜欢 GPL 但也没办法。

3, 你这是典型 BSD 是最好的,Linux 就是垃圾的宗教心态。另外如果你现在不是是 Linux 内核开发者,那我建议你先成为 Linux 开发者,再提各种魔改 Linux 内核的事儿。另外这里的人,都不是你的典型客户,你也根本讨论不出来结果,那些 “无知” 的客户才是你的典型客户。

4, 我当然分得清什么是锤子什么是钉子。

BSD 系统和 Linux 系统,从市场上看,两者是替代品的关系。做项目选择基础组件,选的都是最合适性价比最高的,要以 “商人” 的心态做技术。

如果你以看待宗教的方式看待技术,那根本就没有继续讨论的意义,因为在你眼里你永远是对的。
noli
2017-08-09 08:44:24 +08:00
@zhicheng

1. 我不知道你是哪一种类型的开发者,以及是怎么理解 sandbox 这种技术的细节。
不过或许你可以告诉我一下,Android 如何在没有 linux kernel 的支持下开发出一个不能被开发者绕开的 sandbox ?
你不会以为写任何 Android 或者 iOS 的 App 的时候,只能 link SDK 提供的标准库吧?
如果能够绕开在 SDK 里面提供的 Sandbox,这种 sandbox 能作为商业 OS 推出市场吗?

App 质量当然和 OS 关系不大。但讲事实讲良心,你觉得 Android App 质量是不是 Android 的生态系统惯出来的?
iOS 成功当然不仅仅是因为 BSD,但事实就是 iOS 在 BSD 的基础上提供了很好的扩展。

当然了,你说的 App 质量是在说个例,我说的 App 质量是在描述普遍水准。根本不是在说同一个事情。

并且,iOS 还真不是 microkernel,顶多算是 hybrid

2. 我部分同意你的说法。在当时,“ Linux 比 BSD 从开发者数量到工具链等更成熟”。
然而这不能说明这不是一个偶然。
这跟我今天选不选 Freebsd 或者 其他 BSD 甚至 Redox 什么的,并没有什么必然关系。
当时的 BSD 系没有乘上开源的快车是造成了暂时落后的主要原因,但 BSD 系比 Linux 更老牌是事实。

3. 并且 BSD 的 API 比 Linux 的更有前瞻性,继续以 kqueue VS epoll 为例,
epoll 不能服务 file IO, 要另外使用 inotify, epoll 也不能支持 timerfd, signal fd ; kqueue 全包了, linux 弱鸡
epoll_ctl 一次只能关注 一个 fd,你要关注 100 个,麻烦你发 100 次 系统调用; kqueue 一次搞定,linux 弱鸡

我就不说 fs 上的其他了。你先告诉我说,Linux 在哪个细节上不比 BSD 垃圾吧。
你这么推崇 linux,反倒说我宗教?同志您写过多少跨平台代码?

“这里的人,都不是你的典型客户”。我可不敢小瞧天下英雄。
虽然你没证明你是其中之一,不过起码还是能有有趣的讨论的。

4. 空话我就不多说了。能不能先做一回小孩,只说对错,不讨论利益?
noli
2017-08-09 08:45:55 +08:00
@hjc4869

Q: 那么作为一个自由的 OS,是不是要允许用户在 jail 外面运行代码?
A: 当且仅当 OS 规则默许或者 用户明确授权之后,允许 jail 外面的代码运行。
hjc4869
2017-08-09 09:27:42 +08:00
@noli 那么假如阿里给你的 OS 出了个支付宝,但是强迫用户允许其在 jail 外运行才能用呢?
noli
2017-08-09 09:30:29 +08:00
@hjc4869 jail 可以做得到让客户 app 不知道自己 jail 里面的。
hjc4869
2017-08-09 09:39:00 +08:00
@noli 那假如阿里做了个内核模块用于检测呢?开放 OS,应该也允许用户自己插入内核模块吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX