Skip to main content

Reality World 开源技术分享会

· 28 min read
Chunlin Qin

呃,这又是一个创业公司营销的噱头和方式吗?

又去看他们宣传产品不讲技术吗?

你直接开源不就得了,还搞什么线下活动?

先回答问题

关于第一个问题,Reality World已经慎重决定由创业项目转为纯开源项目,也就是说它后面将不会有一个创业公司实体来运营,它会真正依靠社区及其组织进行发展,就像Bevy等开源项目,当然我肯定也会持续在这个项目进行迭代开发。这也意味着它不再有商业利益,任意公司或个人都可以使用或者基于它进行修改或扩展。

之所以这样的选择,很大一个原因是,我觉得这几年技术、环境和产品形态的变化和发展都很快,各种概念弥漫着整个世界,我认识和交流过很多投资人、创业者、开发者以及行业很多不太懂技术的各种角色,即使最聪明的人,往往也很难在一些关于技术的理解上达成共识,而且国内的整个环境普遍还是更关注上层的应用,而硅谷的很多产品创新更多是源于对技术的深刻理解。所以我觉得站在这个历史阶段,我们最重要的是要有一些关于技术的基础讨论形成共识,要有一些具体而系统的实践而不是停留在臆想,然后要将这样的基础共识开放为公共资源,形成一些坚强的共识底座,然后有了更清晰的技术理解,上层的创新才会真正的繁荣。Reality World 现在的使命就是尝试去成为其中的一股开放力量,它首先提出自己对技术和未来的系统理解,然后基于这些理解构建一种可供大家学习和讨论的实践,最后开源出来供大家传播、分享、讨论和发展。

关于第二个问题,如果有朋友参加过我2018年的全国图形渲染技术巡讲,一个人围绕一个主题讲3~4个小时,在中国这种会议几乎是绝无仅有的,那种系统和深度远不是那种15~45分钟蜻蜓点水一样的感觉,这将是一场非常深刻的技术旅程,我相信每个人可以学到非常非常多的知识和理解,后面我会大概说明会讲什么内容。

关于第三个问题,这个项目跟其它项目非常不同,简单来说,直接开源出来让大家自己研究代码和文档可能并不好理解,通常我自己有时候也很难用简单的几句话向朋友或投资人说明Reality World是什么。一方面是Reality World太技术,涉及的每一个设计决策都有很多不同层面的考虑;另一方面它涉及的技术面非常广,从程序的组织结构、到编译/解释/链接,到运行时的虚拟机、调度和沙盒,以及还涉及到怎样用这些技术去解决比如元宇宙应用的一些需求等等;最后它的目标也不是一个简单的应用或者一个框架,它是介于框架和编程语言之间的一种用于构建应用的软件构造方法,但它本身也不是一种编程语言。

所以,这么多复杂的事情耦合在一起,我必须用语音和视频的方式才能更清晰的表达它,才能让大家更好地理解这个项目的目的,不然开源一个大家都看不懂或者连看懂目的都很复杂的项目有什么意义呢?但好消息是,如果你听我一次系统的讲解,它其实理解起来非常简单,但这种简单它不能用简单的文字表达,否则你可能要花费远远大于3个小时的时间才能更清晰的理解这个项目的逻辑和目的。

Reality World是什么?

尽管这个问题回答起来很困难,但我还是必须要尝试用简单的几句话解释它,否则都不知道它是何物,我为什么要去关注这个项目和参加这次活动呢?

Reality World是一个面向具有“未来特征”应用的开发框架和运行时,开发框架是指它是一个用于构建应用的工具,就像你用游戏引擎可以构建游戏程序,只不过现在它还不支持图形和UI显示,但是在将来它应该可以比较简单地集成一些渲染引擎或者UI框架,毕竟这部分的内容和工作流程大部分是比较成熟的,也可以很容易地把它嵌入到已有的游戏或者应用中,用于提供一些额外的功能。

所谓未来特征,我们主要指三个层面,后面会有更多讨论:

  • 互操作性
  • 相互协作
  • 去中心化

实际上,这三个特性正对应着元宇宙(互操作性),大模型应用(多智能体协作)以及Web 3.0(去中心化)。尽管这三者之间的概念以及技术需求都是很模糊的,我们则尝试在这三者之间寻找一种统一的计算架构和软件构造方法。所以这就是Reality World技术上的复杂性,也就是为什么我们思考的是面向未来5~10年的应用的形态。

Reality World整个体系分为三个部分:

  • Cogine:是整个应用构建方法的底座和运行时,它定义这种应用的表述格式,以及对这种格式的动态解释和运行时的其它功能。该词的前缀 co- 取自Complexity system,或者Cognitive computing,或者Conversational computing,这些术语都是Cogine背后的一些技术思想;后缀 -gine 来自于Engine。所以可以称之为复杂引擎,认知计算引擎或者对话式计算引擎,其中复杂系统相关的一些理论是它重要的一些设计原则和目标。
  • Reality Create:是这种应用的编辑器。
  • Reality World:是这种应用的一个模拟器,任意一个基于Cogine定义的格式构建的应用程序包,都可以被它直接动态加载和运行。当然作为一个面向用户的应用程序,它还有其它一些功能,比如程序的安全授权管理,多程序的分组以及用户与程序的交互界面等等功能。

讲什么?

基本上,会分享所有关于Reality World的一切,包括它的为什么这么思考,具体的架构设计,以及一个具体的代码实现和Demo演示等。

计算机和数字化发展这么多年,我们已经积累了非常多的知识、理论和方法,从编程语言、软件工程到各种架构设计模式,而且几乎任何一种新的特别是偏底层的架构设计,往往都面临着跟其它很多模块的交互和协作,所以与单纯了解一种方法本身的知识相比,其背后的逻辑和设计思想有时候更为重要。

大体上,3~4个小时的演讲分为两个部分:

  • 约有40%的内容讨论为什么要这么设计
  • 其它60%则介绍具有的架构设计及代码

Reality World的目标,是要构建一种新的程序组织和构造的方法,所以最基础的问题就是为什么要构建一种新的方法?我们已经有非常成熟的各种体系,在传统的流程中,比如要构建一个应用程序,首先基本的各种编程语言如C++、Rust、Python、Javascript、C#、Go等基本上解决了大部分的逻辑组织和表达的问题,剩下的主要就是在显示层又会有不同的选择,比如要想实现3D的图形界面,至少得选择一个游戏引擎或者其它具有3D渲染能力的组件或者框架,2D的界面则有更多各式各样的选择,比如iOS和Android都有原生的UI交互框架,也有其它一些如React、Flutter等跨平台或者基于Web的各种框架。

因此这个其实是Reality World最核心要回答的问题。为什么要设计一种新的方法,我们将主要从两个层面来回答:

  • 外在层面
  • 内在层面

外在层面 是指在编程语言和传统软件构造方法之外的需求,这部分也是更多对应40%的内容中为什么要这么设计的问题。过去几十年来应用构造的体系基本上都是围绕构建一个单一的程序体被隔离在单一的内存中运行的,在这种背景下,软件之间的功能通常都是相互隔离的,甚至即使是属于同一个用户不同应用之间的数据,虽然看起来都是同一个用户的数据,但是不同的软件之间却无法访问。这种机制在过去几十年都能够很好地解决我们的数字化的问题,直到Web 3.0和元宇宙的出现,这两种新的应用形态似乎都在尝试构建一个共享、互操作的数字世界。这要求应用之间需要高度交互能力,然而这种需求和传统的软件构造方法是天生相悖的,传统软件构造方法建立内存隔离的目的就是保护数据和内存中数据的安全,它的一个基本的安全底座就是系统的内存环境会保护程序内所有的数据,因此传统的编程语言和软件构造方法就没有太多专门针对这些数据的保护措施,但是当我们去掉这个内存保护,要求很多匿名的软件在一个内存环境中进行运行的时候,这种安全性怎么保证。虽然Web Assembly和一些容器等沙盒技术提供了一些解决方案,但是沙盒技术本身更多是为虚拟化而设计,它的主要方法也是建立模拟操作系统的内存保护机制。

因此,本质上针对这种新的需求,我们要重新思考软件构造方法本身。而要开发一种新的思路,我们就必须要很好地理解现有各种技术的原理及其问题,这里涉及的技术点比如编译器的寻址计算,内存机制,沙盒技术,USD/LLVM/MLIR等一些具有互操作和模块化能力的技术思想,虚拟机的作用,区块链中互操作性架构的一些思想。

除了外在的需求和驱动,现有的软件构造方法在 内在层面 也存在很多问题。一个现实的问题是编程仍然是一份门槛非常高的工作,全世界会编程的人不足0.5%,所以说我们今天的数字化的程度是远远不够的,因为剩下那么多群体能带来多少可能性是不可估量的。尽管现在有大模型这种提升编程效率的技术和方法,但是在软件构造方法本身没有变得更简单之前,也很难解决实质性的问题。

软件开发是由人去表达人类理解的逻辑流程,然而现代大部分编程语言的核心抽象都还是面向硬件和编译器的,我不是说编程语言一定要是自然语言,但是传统的编程语言中有很多的概念和规则都是面向计算机的。

首先,比如程序的数据管理是非常复杂的,你必须要定义数据被存放在哪里,怎么初始化,什么时候删除,当你需要执行某个具体逻辑的时候,往往需要搜集各种上下文以计算条件,这些数据充斥在各种结构各种对象中使用各种不同的方法进行封装。我们编程很多时间就是在组织这种数据,决定他们被怎样构造、初始化和存放才能使得获取它们变得更简单而灵活,而且这种结构也复杂往往越混乱,因为这些数据还对应着复杂的运行时状态,这样逻辑的执行就不光取决于数据,该取决于执行时它们的状态,这样你就不得不很好地维护它们正确的状态。

当一个程序员在思路TA代码中的逻辑跟TA思考现实生活中的某个事情时思路是完全不一样的,在现实中我们往往很少关注一个东西的位置我要把它放在哪里,我去访问的时候它们的组合状态对不对等,现实生活中的一切似乎都是那么自然,我们的精力都在关注事情的逻辑本身。

其次,程序的结构组织也是非常复杂的,我们人思路现实世界中的问题通常是线性的,先做什么再做什么,我们往往任意用流程图把它画出来,人与人之间的交流也非常简单。程序的流程则通常很难可视化,因为它的表达不是线性的,整个流程有点像一个深度优先的遍历算法,对于每一个开始的节点,它必须进入每个函数的调用链,直到所有的子函数调用都结束才会返回来执行下一步。就像我们人想事情是先把总体流程步骤想好,再去解决具体一个个细节问题,计算机程序是每做一件事情都需要把它的细节全部做完,然后开始下一件事情。你可以说每个函数内部在不去看系函数的时候也是线性的流程,但是你很难进行可视化,因为这些函数内部的细节,它们没有一些规范,函数的输入输出参数定义也不一样。更要命的是,你无法很轻易地对流程进行调试,比如想跳过、新增或者调整某些流程,这可能需要去修改源代码,而源代码通常不是注释那么简单,因为有些流程可能产生关联数据导致后面的流程根本就无法执行。

我把这个问题称为程序结构的问题,可见我们仍然无法用比较符合直觉的方法去构建逻辑流程。

所以我认为,编程这个事情的门槛,其实很大程度上并不是来源于编程语言本身,而是在与程序的结构组织和数据管理。这两个层面其实都是和编译器和硬件有关,正是因为编译器需要按照这样的方式编译为硬件可以执行的程序,所以编程语言才是这么设计。

结合上述外在和内在的问题,Reality World的目标就是,通过深入分析程序构建和执行的整个过程,能不能设计出一种新的方法流程可以同时解决这两个问题。这就是我们这次技术分享会的重点内容

面向的受众群体是谁?

本次活动主要面向两类人群:

  • 希望深入了解相关技术的开发人员
  • 希望通过深入了解一些技术的思路来更好地理解一些新的技术概念的非技术人员

对于技术人员,如果你关注以下技术,你可以来听听我的理解:

  • 游戏引擎架构
  • ECS/DOTS
  • USD
  • LLVM/MLIR
  • Rust
  • Web Assembly
  • 编译、解释、链接过程
  • 面向对象
  • 函数式编程
  • LLM应用
  • 元宇宙及互操作性
  • 开放世界和复杂系统架构

对于非技术人员,可以帮助你更好的理解以下技术概念:

  • 元宇宙
  • 大模型应用架构

开源的目的是什么?

我希望Reality World的开源可以实现以下几个目的:

  • 为未来5-10年的数字世界基础架构的技术发展方向提供一种系统的视角,这个问题是非常复杂的,不光是技术本身就充满复杂性,要考虑很多问题,同时在认知上去理解也是非常复杂的,所以我们必须构建一套清晰的视角去理解这些问题,为后续的研究提供一些有价值的参考思路。
  • 为上述的架构体系提供一种可行且简易的技术实现方案,提出一种想法有时候看起来很容易,例如很多科技媒体也提出许多对于未来软件应用的畅想。但一套可行的技术方案涉及很多细节,例如你对现有技术体系进行怎样的调整,理由和必要性是什么,调整之后对其它模块的交互方式是怎样,调整之后怎样建立新的生态,用户怎样去学习等等,这一切后面涉及非常复杂的架构思考。所以我们必须有一个可行的技术实现方案,才能说明它的可行性,因此才具有参考价值。
  • 为程序员对技术的学习提供一些不同维度的理解,我们程序员终极一生的努力可能都是尝试去更好地理解软件构建的逻辑思维,因为软件的逻辑表达是极度复杂的,这种复杂性随着软件规模的增大而急剧上升。程序员应对这种挑战的最好方法,就是尽可能去更好地理解软件构造的逻辑。这种逻辑可能超出对一个技术本身作为工具属性的掌握,更要理解这些技术背后的思想,我认为掌握技术思想的衡量方式就是你有可能把它用于超出它本身被定义用来解决问题的范围,Reality World的设计和思考过程充满着大量的这类对技术的不同解读,相信能够提供很多不同的启示从而助力我们掌握技术背后的思想。
  • 借助社区的力量去挖掘这种新型技术架构能够支撑的产品形态,最近几年关于Web 3.0、元宇宙、以及大模型AI应用的持续不断出现,人们对未来数字化的预期会越来越大,未来的数字化形态必然会发生一些变化。但是目前很多因素糅合在一起使得我们很难去看到清楚的路径,这里面必然涉及到底层技术以及上层产品形态的相互驱动及进化,任何单一实体可能都很难从这种耦合中看到清晰的逻辑。所以Reality World聚焦于技术的思考,并将这些思考全部开源,然后不同的行业可以吸取这种思考去融入自己的产品思维,这样也许我们可以共同来理清未来的思路。

License

Reality World所有的源代码及其技术架构思路均采用非常宽松的MIT开源协议:

开源什么?

基本上,Reality World相关的所有一切都会开源,包括:

  • 核心代码
  • 整理手稿:大概20多万字我整整一年记录的一些思考、参考信息和资料
  • 架构文档:重新整理的系统性的技术文档,大概10多万字
  • 白皮书

开源信息

活动结束后将会上传代码,仓库地址:

https://github.com/Cogine/RealityWorld

开源社区群

由于人数问题以及广告太多,请先加我微信再社区群:ARealityWorld

活动信息

时间:2023.10.22

地点:上海市长宁区长宁路1189号 长宁来福士办公楼T2座26楼 亚马逊演播厅

时间内容
13: 20签到
14: 00技术分享
17: 00开放讨论
18: 00活动结束

联系我

分享者:秦春林

Reality World 创始人,前华为河图核心成员,《全局光照技术》《我所理解的Cocos2d-x》作者。

自去年从华为离职独自创业探索一年半,致力于思考和探索能够为用户体验和生活带来全新价值的软件构造方法,现将这一年的探索毫无保留开源给社区,我将用3个小时非常系统、全面地分享我所有的思考和技术理解。

欢迎各位朋友与我交流和讨论,我的微信:ARealityWorld。

官网地址

https://realityworld.com/

报名地址

https://9371398676573.huodongxing.com/event/1723877940100