一个草根团队驱动的国产编程语言,开源1年后,如今活的怎么样?
这是关于一个国产编程语言的故事,在研发 5 年、开源一年的过程中,他们有过迷茫和挑战,更有豁然开朗的心得与体会。在本篇文章中,他们围绕研发初衷、开源成果、最新进展、趟过的那些“坑”和学会的那些道理做一次深度的分享,也借此希望能够给为国产基础软件路上的同行者带来一些参考。
作者 | 柴树杉,丁尔男,扈梦明,赵普明
责编 | 梦依丹
出品 | CSDN(ID:CSDNnews)
随着我国基础软件的快速发展,以操作系统、数据库为代表的的国产软件正在不断发力与追赶国际先进水平。而作为软件开发的最底层,软件开发的核心工具,编程语言在推动技术创新和产业发展方面起着至关重要的作用。
纵览国内外各大编程语言榜单,我们很难看到国产编程语言的身影,但这并不意味着国内开发者就放弃这一领域的探索与研发。论及当下,已有一门旨在推动 WASM平台发展的编程语言已经开源一年了,在同类型项目中是首个实现浏览器内编译、链接、执行全链路能力,具备纯浏览器环境开发云基础设施的潜力,它就是——凹语言。
这门语言是在2018年底由国内一群编程语言爱好者发起的开源项目,在2022年7月正式开源(https://gitcode.net/wa-lang/wa)。在开源的一年时间了,它已经完成大部分语言特性的开发,开发组对外发布了MVP版本和配套的《凹语言参考手册》。
-
凹语言主页:https://wa-lang.org/
-
凹语言手册:https://wa-lang.org/man/
技术目标与“躺平”梦想
作为程序员三大浪漫的核心、传承计算机文化的编程语言,在国内依然是技术荒漠。在云原生领域最流行的Go语言,第一个“hello,世界”中依然跑的是日文!没想到国内在编程语言领域依然和20年前一样。
2017年前,凹语言创始人柴树杉在航天远景做Emscripten相关的探索和实践,彼时,凹语言的另一位创始成员丁尔男对WebAssembly做过一个断言——“一切可编译为WebAssembly的,终将被编译为WebAssembly。”后来该断言被逐渐验证,在2018年8月作为Emscripten的继承技术WebAssembly也发布草案。
随后,柴树杉和丁尔男结合工作中的实战经验,出版了《WebAssembly标准入门》一书,书中最后一章是讲Go语言和WASM技术的结合。
作为对编程有兴趣的老码农,他们本着为自己定制一些工具的想法,针对WASM平台精简定制Go语言。2018年底,他们想到了“凹语言”这个名字,这不仅仅代表着WASM的初始目标,也表达了某些“躺平”的梦想。但是启动一个新语言的阻力是360度全方位的,他们甚至根本没有敢对外宣传(和很多的项目还没开源没发布就对外大肆宣传登顶各种排行榜的做法完全相反)这个事情——只是悄悄地注册了域名并在GitHub创建了组织,之后就是近乎3年的沉寂。
2019年,国外分别诞生了TinyGo、AssemblyScript和V语言等项目。这些同类或近似的潜在竞品都为他们提供了宝贵的路线参考。此外WASI规范诞生,WASM包管理工具陆续出现,这些变化和发展几乎完美印证了他们2018年对WASM技术的推演,这也无形中增加了他们决心基于WASM平台研发一个好用的通用语言。
2020年,他们一起探讨了凹语言路线,同时完善《面向WebAssembly编程》开源图书。与此同时,这一年,LLVM社区专家史斌加入进来。到此,凹语言三个联合发起人组织初步成型。几个发起人对凹语言的目标达成了共识——不做玩具车!可以说“不做玩具车”是凹语言后来发展方向和各种决策的基础原则。在后半年,三个发起人还完成了《Go语言定制指南》一书,至此凹语言未来发展路线的关键技术均已完成理论准备。
时间再跨越2年到2021年底和2022年初,结合国内外、公司内外的各种环境的变化,凹语言的实现工作正式启动,并在2022年7月完成了凹语言的开源工作。开源之后,社区小伙伴的加入给凹语言项目带去了极大的活力。
真假开源惹争议
在2022年刚开源的时候,凹语言尚未明确开源协议,采用的是保留全部权利。当时有人在网上质疑:说凹语言开始大量使用了Go语言的代码是BSD,凹语言改为自有协议是否合适?
对此,凹语言发起人柴树杉表示:“BSD协议是不阻止、甚至是鼓励拿来商业化和私有化的,因此凹语言当时做法没有任何问题。但用户可能是在隐晦质疑开源道德——网上总是会有各种声音!”
后来经过多次会议讨论,团队决定采用了AGPLv3协议。主要是因为创始团队认为他们是一个草根团队,担心用爱发电的开源项目会被商业公司白嫖。他们还列了几个前车之鉴:
-
开源的MongoDB被AWS白嫖后改了SSPL协议被OSI等道德指责;
-
HashiCorp将Terraform等核心资产从MPL改为商业的BPL;
-
Facebook开源的大模型采用附加商业限制的开源协议;
-
Qt直接回到商业协议。
为何OSI会拒绝SSPL,为何能接受GPL?这背景是因为OSI代表的是商业公司在和GPL、SSPL等代表博弈的结果。凹语言采用AGPL是因为它是OSI认证的限制最严格的协议,否则很多被说是伪开源。
基于此,柴树杉还重点提到:开源真是用爱发电,但是开源者不是傻瓜,为众人抱薪者,不可使其冻毙于风雪!MongoDB的选择必须鼓励,而抵制和限制GPL协议的头部大厂才是需要指责!
开源后,凹语言社区如何组织运营?
为了项目能够民主快速地推进,凹语言成立了临时决策委员会,该机构平时简称临委会。根据临委会章程,语法或运营模式的变更需要由委员发起提案,经临委会投票通过后才能公示生效,也就是说委员可以通过发起提案,以及对提案进行投票的方式来对项目路线施加影响。除了在自己负责的方向持续推进之外,临委会委员还需要处理各种日常事务,比如开发会议组织、参加各种交流、评奖活动等等。
与此同时,为吸引更多志同道合地开发者参与进来,凹语言项目在多个平台建立沟通渠道。为保障贡献者们的权益,公平对待参与者、记住所有的贡献者,凹语言项目始终把人放在第一位。而他们所成立的临委会、贡献点制度都是为了保障这一点。
贡献点制度是凹语言社区用来量化记录和激励社区成员贡献的制度。
基本设计:社区从2022年开始,每年产生10万个贡献点,所有参与项目并产生贡献的人,都可以按照贡献量获得贡献点。贡献的工作可以是代码、文档、参与会议讨论、参与宣传等一切需要花费功夫的工作。分配周期为1年一次或半年一次,需要发起决策提案,由决策委员会负责工作量的鉴定和贡献点的划分。贡献点的分配流程和结果都会记录并在社区文档中,并公开展示。
到现在为止,已经进行了3次贡献点分配,共计15万点。这些贡献点分给了12名同学,数目从35000到2000不等。
等到社区成熟之时,社区的决策制度将转为公开投票制度,到时候贡献点可以用来调整投票的权重,即贡献点多的人可以投出更多的票数。最后,如果这个项目未来能够产生商业价值,那么收益分配阶段也可以用贡献点作为参考。
开源1周年大事记
在过去开源的一年间,截止2023年8月底,凹语言团队召开20+次社区会议,产生8次提案,代码提交900+次,完全自研代码超过2万行,发布了18个版本,发表30篇碎碎念文章,完成MVP版本发布和《凹语言参考手册》编写,GitHub 650+ Star。
最新的MVP版本初步达到语言可以试用状态。实现了大部分核心语法特性,开发者可以以此为基础进行标准库的开发。目前只有少数特性MVP尚未实现,主要有三个:map、反射以及defer。另外目前的版本中,有一些运行时行为不满足语法定义,比如切片下标没有做边界检查、孤环内存会泄漏,但随着编译器的更新这些问题会自动解决,不影响向后兼容性。
比较大的功能有:
-
完成绝大部分语言特性
-
凹语言 Playground上线
-
VS Code/Fleet/Vim插件
-
完成贪吃蛇案例开发
-
实现BrainFuck虚拟机
-
完成官网升级
社区相关的有:
-
凹语言临时发展委员会成立
-
制定贡献点激励制度,并向社区贡献者发放15万个贡献点
-
明确开源协议为 AGPL-v3
-
2023纪念胸章发行
-
参加上海全球人工智能大会
-
GLCC开源夏令营
-
在国产语言论坛开版
-
开源创新大赛获优秀开源项目
-
OpenTEKr大话开源
-
OSDT社区闪电分享
孤勇者们面临哪些困难与挑战
这群一群半路出家的非计算机专业出身、非编译器从业者,他们在追梦国产编程语言的道路上,遇到了哪些挑战和困难?
柴树杉直言,心理挑战贯穿始终。
时间回到2010年,那会儿Go语言刚刚开源,国内有一大批Gopher疯狂关注,柴树杉作为其中一员,为Go贡献了BMP/TIFF等图像库,2015年翻译了《Go语言圣经》。这些经历让他第一次近距离围观了一个现代化语言的诞生和发展的过程。但在尝试自己开发一门编程语言后,压力还是油然而生。
要么快速发展,要么提前死掉。这是2022年紧急决定开源时,创始团队的想法。彼时凹语言作为一个纯草根项目,他们担心一些有资本和国家背景的竞品语言出来后,凹语言将失去被关注的机会,他们自己也将失去继续的信心。
而在语言的开发建设过程中,各个功能的设计与实现背后都有着诸多的深思熟虑。
经过一段时间的讨论和思考,赵普明打算应用凹语言的社区决策制度来重新决定中文语法的设计:把整套语法拆分成不同的部分,分别写出提案,征集各种方案,再经过讨论和决策委员会的投票定下来。过程虽繁琐,但他觉得,这是个不错的社区化尝试,过程中,他也可以不断学习和总结各个编程语言的特色。
最后,他提到:实现中文语法后发现了一个新的独特的需求,即凹标准库是用英文写得,那么该如何用中文去调用英文的库函数?如何访问英文实现的结构体?编译器需要在中英文代码之间架起一道转化翻译的桥梁。
在开发过程中,凹语言团队发现每个阶段和成果之后都有新的广阔空间需要去建设。比如随着项目的发展,代码变得开始膨胀,像早期的Arduino Nano33环境的例子已经不能执行。每个时刻,他们都会担心突然冒出一个咋看不起眼的问题击垮他们。剔除技术因素,人员工作变动也可能会让项目停滞,还有项目如何推广、对于社区成员来说,免费参与项目建设,却被人质疑炒作、假开源等……
语言项目门槛高,可能是种偏见
编程语言是一个短期内毫无商业价值,但对应长期生态的基础软件技术。于凹语言团队而言,开发者能够在一个缺少商业价值的项目花费时间投入进来,必然是真正的编程语言爱好者。正如凹语言团队所推崇的slow is fast——低成本低效率让项目团队具备长期运行的潜力(凹语言从立项到现在时间将近5年)。同时草根小团队因为缺少KPI压力,在实现过程中可以降低技术变现的风险,可以更坚持项目的初心和突出项目的个性口味。
当下的主流编程语言,C/C++,Java,Python,Ruby,Lua,Go,TypeScript、Swift,他们的创始人都是个人在驱动。当然,如果大厂的编程语言团队能够彻底摆脱KPI的魔咒或许会有更大的潜力。
他表示:只需要找到自己的专长并持续为团队做出贡献,从而实现赋能。当然也离不开团队成员的鼓励支持和帮助。这也就是凹语言团队的魅力所在,其多样性和包容性让每个人都能在团队中发挥自己的专长。而且在与团队伙伴们交流过程中也能收获到不同领域的知识和经验。
本文文字及图片出自 CSDN
你也许感兴趣的:
- 【程序员搞笑图片】数据类型简明指导
- 33 种编程语言的 UUIDv7 实现
- 【外评】Rust,你错了
- 【外评】为什么人们对 Go 1.23 的迭代器设计感到愤怒?
- 华为自研编程语言“仓颉”来了!鸿蒙应用开发新语言,性能优于 Java、Go、Swift
- 【外评】JavaScript 变得很好
- 【外评】华为发布自己的编程语言 “仓颉”
- VBScript 废弃:时间表和后续步骤
- 【外评】BASIC 编程语言 60 岁了
- 【外评】为什么 ALGOL 是一种重要的编程语言?
你对本文的反应是: