- 将运行时的变量等环境打包成一个img文件,同时记录module的版本,通过对运行环境的检测(Racket及其库代码)来运行解锁img文件。
- 运行img时,可以实时修改img环境,在加载img的时候可以告诉Racket应该做什么,比如重新连接到某个服务器等等,每个img由类似于repl的控制台来控制(即img-repl),可以在一个img存储或运行多个互不干扰的img,img可以进行拷贝传送等。
- img除了记录所有的运行时环境外,还会记录所有的运行的Racket代码,方便更新调试。但是查看img记录的代码,需要一定权限甚至加密解密。
- img可以被轻松地发送到远程机器,调用远程机器上的库代码,执行任意复杂的查询索引等动作,取回结果img。
- img有独特的接口来实现不同img间数据的交换,一般的,各种数据结构以及文件被视为变量,通过变量名或者特殊的访问函数来访问。
- 基于img运行,甚至可以说每个img就是一个Racket的操作系统。
- 最基础的功能是由一个最基本的img-repl组成,运行一些最基础的模块,可以新建一个空白img,然后通过各种模块和变量的设置,配置成个性化的img-repl,作为用户的常用控制台,类似桌面的存在。
- 最基本的img-repl有各种系统代码,因为Racket不支持指针运算,所以用户函数不可能绕过系统函数而非法的访问硬件。
- 各个工作可以由专门的img-repl执行,比如游戏,聊天,代码编辑等等。
- module是类似于文件及目录的存在,每个module所用的语言类似于后缀名,module名称类似于文件或目录名,通过img-repl引用各种module来实现系统的各个功能。
- 更新及运行img,可以选用最新版本的Racket直接打开运行,这样会使img中绑定的变量发生变化,从这个时间点开始原img中的变量函数,都引用最新版本的,这属于小更新。这样可能会出现一些问题,但是可以通过特定的安装包对img中的矛盾代码进行修正,然后重新加载运行,这属于大更新。
- 在实体机中安装系统只需要通过一个有Racket的启动盘,通过网络下载img的相关数据,然后直接运行写入硬盘。
- 实体机中,所有的数据在合适的时候被自动同步到磁盘,并且进行容错处理,所以即使在机器掉电的情况,绝大部分的数据和进程能够在电源恢复后继续运行。
- 程序员和用户几乎完全不需要知道“数据库”或者“文件系统”的存在。程序假设自己拥有无穷大的空间,可以任意的构造数据。根据硬件的能力,一些手动的存盘操作也可能是有必要的。
- 为了减少数据的移动,系统或者用户可以根据数据的位置,选择: 1) 迁移数据,或者 2) 迁移处理数据的“进程”。程序员不需要使用 MapReduce,Hadoop 等就能进行大规模并行计算,然而表达能力却比它们强大很多,因为它们全都使用同一种程序语言写成。
- 系统只由Racket写成,Racket可以读取图片,文本文件等作为一个变量,并且提供一个函数使用该变量来处理或运行。甚至可以写出别的语言的解释器来运行相应的软件。
- 系统的各个程序之间只用Racket的数据结构(非字符串)进行通信。系统由一个个模块组成,加载相应的模块,运行相应函数,设置相应变量来实现应用程序。
- 由于Racket不提供指针运算,所以不会产生segfault错误。特定工作都有互不干扰的img-repl,恶意攻击只可能是加载了恶意的代码从而对该img-repl产生恶意影响,但不会影响其他的img-repl。
- 每个img-repl可能都有一个备份并且在特定时刻进行更新,这样可以回溯防止其崩溃造成损失。
- 所有用户都有一个独属于自己的img-os(即最基础的img-repl),那么可以把这个img存储在服务器或移动硬盘上,在任一设备都很容易移植属于自己的运行环境。
- 通过一个登录器软件,可以直接登录服务器运行自己的img-os,根据使用时长以及内存等消耗进行缴费。
- 可以专门研发各种登录器设备,比如会折叠弯曲的屏幕等,对芯片内存等无太大需求,只需要安装登录器,连接远程的img-server,登录自己的账户即可运行自己的img-os。
- 可以通过专门的网站来共享各种各样的img-repl,比如桌面,游戏配置等。
- 多人登录同一img-os协作工作。
- 开发公司只需要自己调试好自己的产品img-repl环境(即img-app),就可以直接发送给用户运行。
- 用户使用app中产生各种bug,可以直接把img-app发送给官方进行修复研究。
- 直接在官方服务器上生成属于用户的img文件,用户每次登录时,都能立即返回上次退出时的状态。
- 用户发现各种bug时,官方可以直接通过该用户的img来进行调试修复。