数年前,我曾写过一篇文章,阐述为什么我认为开源不适合 Wolfram 核心技术的商业模式(Wolfram 技术不开源的十二个原因)。也引发了一些关于不同模式优点的(大多是理性的)讨论。
受这些讨论的影响,我意识到,尽管 Wolfram 不是开源,但大多数开源软件实际使用中的优点在 Wolfram 技术中也很明显。所以,如果你不介意这个有点标题党的标题,我想分六点阐述一下:
(相关资料图)
1. 可以免费使用;
2.可以查看源代码
3.可以对代码进行修改
4.你可以做出自己的贡献
5.有技术支持的社区
6.我们一直积极开发各类功能
01你可以免费使用
由于我们的中心商业模式是做优秀的软件并出售其使用许可,所以当我说到有几种方法可以免费使用 Wolfram 语言你一定会感觉有点惊讶。当然, Wolfram|Alpha 是免费的,但我说的是完整的 Wolfram 语言。最简单的方法是创建一个免费的 Wolfram 云账户。这样你可以免费通过浏览器或 API 使用完整的语言功能。确实,你会有 CPU 时间和存储的时间限制,因为你使用的是免费账户而这些功能对我们而言都有成本,如果想要升级这些功能你可以选择付费。
想要本地使用?试试看 Raspberry Pi 版本。完整的 Wolfram 语言可以免费在这个五刀的电脑上使用,不过会有一些商业使用限制。想在个人电脑上使用的话,在 macOS、Windows 或 Linux 操作系统上有 Wolfram 引擎。你可以在项目开发阶段免费使用这个工具;还有 Wolfram 播放器,只可以免费用于运行代码,不可以编写新代码。
所以,虽然开源软件不是“免费做所有事”,但依然可以做很多事。
最重要的是,大家必须记住,由于很多人所在机构的支持,他们才可以免费使用技术栈的全部功能。很多优秀的大学拥有站点许可证,所以这些大学的学生和教职工才可以在个人不交任何费用的情况下免费使用这些技术。我们甚至有国家级别许可使用——如果你是埃及境内的学生、教师或学术研究者,你可以免费使用 Mathematica——这就有 4000 万的人口了。你可能会说,“这并不是免费的,还是有人在付钱”。但开源不就是这样吗?到目前为止,Jupyter 和相关项目已经花费了数以百万美元的费用,只想简化 Mathematica 的笔记本,很烦恼的是,这些资金一部分就来源于我的个人纳税!
02可以查看源代码
Wolfram 技术栈的很大一部分且越来越多的内容都是用 Wolfram 语言编写的,所有这些的源代码都是可以查看的。只要关闭 ReadProtected 属性并请求定义即可。从 Mathematica 第一版开始就可以使用这个功能了,但是有些时候,还有一个没有记录但是大家心知肚明的内部函数让你可以仅用鼠标指向点击的方式就可以浏览定义。这个函数现在记录在Wolfram函数资源库中了,用法是 ResourceFunction["PrintDefinitions"]。
比如,这就是 ResourceFunction["PrintDefinitions"][URLRead] 的结果:
点击代码中的函数可以查看其定义。以前用C语言编写的函数或核心函数不能用这种方法查看,但当然,一部分上述函数可以调用真实的开源资源库比如 MXNet、MKL、GMP 和 ImageJ,这些资源都可以在其他地方进行查看。
03可以对代码进行修改
Wolfram 语言中的任何公共或内部函数都可以被替换。查找源代码、编辑并运行就可以替换内置规则。不仅如此,Wolfram 语言的基础设计加上其对操作符过载的普遍支持,甚至可以让你在不需要查看源代码的情况下修改或增强任意功能。
比如,假设我认为我对值较小的实数的 Sin 有更好的执行方法,但我并不想替换值较大的实数、复数和符号参数的内置行为,那么我可以这么做:
你可以看到我是如何在不影响其他行为的情况下进行我的新操作的。这比编辑源代码要简单多了:
04你可以做出自己的贡献
我之前在开源那篇文章中也说过,我们的核心语言不依赖于用户的贡献,尽管我们喜欢详细描述的错误报告。但是在 Wolfram 语言的生态系统中用户有很多其他方法做出自己的贡献。截止这篇博文的时间,在之前提到的 Wolfram 函数资源库中,已经增加了超过 2000 条来自用户和 Wolfram 程序员贡献的函数。这些新函数都像已经内置一样立即可以使用(但是实际上是自动下载并在第一次使用的时候进行安装的),也都带有源代码。
比如,下面这个就是我贡献的用来创建有内嵌地图的地理表面绘图的函数:
而且还有超过万的演示文件以教育为目的被贡献出来,也都有自己的源代码。
你不一定要用我们的交付系统。你可以找到很多通其他方式分享的开源 Wolfram 语言程序包的例子,比如 GitHub。有一些可以在 Wolfram 社区和 PackageData 中看到,而且我们也在准备可以分享更大型的 Wolfram 语言代码的方法。
05有技术支持的社区
实际上有两个有组织的社区,每个社区的重点稍有不同。
在 Stack Exchange 上完全独立的 Mathematica 和 Wolfram 语言站点。该站点的结构是问答模式,已经处理了超过8万个问题。这是 Stack Exchange 仅有的用于单个编程语言的站点,应该也是唯一一个用于单个技术栈的站点。
我们还有自己的支持社区 Wolfram 社区。我们有超过3万会员,这个社区不仅止于技术支持,用户可以分享自己的作品、讨论方法或寻求帮助。你也可以在这里找到志同道合的合作伙伴,一起合作你想要贡献给社区的程序安装包。
06我们一直在积极开发各类功能
除了我们定期推送的小补丁外,另外还有很多在原有功能基础上的升级。这个数量已经多于核心 Python 语言的总运算符数量了。
WE PRACTICE "OPEN DESIGN"“开放设计”一直在实践
这一点并不在人们平常讨论的开源优点中,因为即使你可能以为开放设计可以在那里发生,但实际上并不是。你经常可以看到程序错误和拉取请求,但并没有很多关于设计的策略或决策的讨论。
我们还会直播设计审阅会议。你可以听到我们是如何决定哪些函数可以被加进 Wolfram 语言,我们如何以最小的函数组合最大限度提供不同功能,以及我们如何确定这些函数可以作为一个整体互相协作(我在前一篇博文中讨论过这个问题)。你还可以在直播会议中提问,或者如果你对我们目前遇到的困难有任何想法,尽管提出来。有时候会议会进行得很温和,但有时候也很激烈,但你可以看到要获得好的设计有多困难,因为我们一直在克服一些很困难、晦涩但是很重要的细节。你还可以查看已直播过的超过500个小时的会议内容。
所以,虽然我们的软件并没有在常规意义上做到“免费且开源”,但 Wolfram 的技术在一定程度上可以做到免费,内容很大程度上可以做到开放,且总是追求更好的设计。
购买软件/免费试用
【中英文 Wolfram 软件】请评论区留言或私信申请
关键词: