还记得当年的 0-bug 事件吧?一开始网上有一些褒贬并存的书评,0-bug 老师还能在友好的氛围中和评论者讨论几个来回,直到后来 Milo Yip 老师列了一个很长的错误清单,0-bug 老师终于坐不住了,后面的回复各种充满火药味的人身攻击。这事儿也差不多,不管是维护开源软件还是写书,作者都倾注了大量心血,所以遇到批评,如果自己本身的性格不算很平和,就很容易爆发。从这个角度说我倒是理解作者。不过我觉得挺奇怪的是为什么当年一边倒的骂 0-bug 老师,这个问题下却大多数都在撑 actix 作者?
我关注这个项目也有一段时间了,其实之前就发现那些争议性 issue 里面第一个发出 offensive 留言的往往就是这位作者本人。很早以前(在他所指的 "unsafe shitstorm" 开始前几个月)我就看到作者回复(大意)”呵呵,你是觉得我不会用 Cell?“ 之类的话。有的开源项目经常内讧,但是互喷之后还可以继续合作下去(比如 FFmpeg),但这个作者显然是记了仇,前几个月他就说(大意)”开源社区真TM有毒,不和你们玩了“。难怪围观群众评论 ”The author of actix-web is acting childish again and again“。我感觉这也可能和作者英语不好有关。”Unsound“ 这样本来是对事不对人的用词被他当做是批判和故意挑刺,所以再人身攻击回去。
我不同意可以随意使用 unsafe 的观点。Rust 社区向来都把安全放在第一位。”Rust is a multi-paradigm system programming language focused on safety, especially safe concurrency.“ (Wikipedia Rust 词条第一句)/ ”Rust is a programming language that is empowering everyone to build reliable and efficient software.“ (Rust 官方博客)/ ”Rust is a systems programming language focused on safety, speed, and concurrency.“ (Rust 官方博客)。如果你不理解这一点,你的 Rust 以及系统开发都没有入门。如果是写 Computer Language Benchmarks Game (Shootout),那完全可以任意用 unsafe,比如那边的 Haskell 代码就是这样,顶多其他语言社区的人说这不是 idiomatic Haskell,算是作弊之类的等等。但是 actix 本身是很基础的组件,大量其他项目都在依赖,不止作者一个人付出时间成本。既然权利越大责任越大(如果整个生态良性发展的话 actix 作者收获的赞誉也是翻倍的),我认为作者有义务按社区指导原则首要保证安全。否则,整个基于 actix 的 stack 就像纸牌屋一样脆弱。更何况他相当一部分 unsafe 用法完全没必要,并没有提高性能的证据。如果真是性能攸关之处就算你嵌入汇编大概都不会有人反对。记得我参与的一个比较复杂的 Rust 项目就因为 Tokio 一个很难复现的 BorrowMutError bug (跟这个事件的导火索 issue 提到的一样)在几个月的时间内多次偶然性的 thread panic。如果有人因为 unsafe 出了安全(security)问题,那么应该会有更痛的领悟。
如果是我维护的库,我倒宁愿别人来提负面意见而不是另起炉灶做一个替代品。反正库和编程语言差不多,要么没人用要么天天挨批。有不爽就提 issue/PR 才是开源的标准玩法,而不是一言不合就重造轮子。最后再说一下,任何人收到负面评价都会郁闷,都很可以理解,但是过激的反应确实是不理性的。其实我倒觉得如果他像 Linus 那样火力x2喷回去以保持心理健康,或者坚决不改然后继续维护,都会比现在的结果好很多。