SYZOJ背后的一点故事 & 与LibreOJ的关系(闲的没事

Laffey 2022-04-11 14:03:56 2022-04-30 14:48:58

作者:TimHsue

链接:https://www.zhihu.com/question/268081438/answer/503341099

来源:知乎

发布于 2018-10-04 03:03

原问题:LibreOJ是SYZOJ的官方部署版本吗?二者关系如何?

总算要好好正视这个问题了,之所以一拖再拖,是因为一提起这件事就有心如刀割的感觉。在阅读这篇回答之前,希望大家明白,不管是LOJ1也好SYZOJ也罢,他们都只是个工具尔尔, 重要的是其背后承载的为OI选手提供一个自由开放免费OJ的决心,以及对工程对代码对算法竞赛的热爱。

我是前十一中竞赛选手,SYZOJ原作者的直系学弟,SYZOJ后续开发的负责人员。

至少曾经是。

首先简略回答一下。LibreOJ不是SYZOJ的官方部署版本,LibreOJ可以算作SYZOJ的一个开发分支,其发扬了SYZOJ的优点,剔除了SYZOJ的糟粕, 有许多值得SYZOJ学习的地方。官方版本的SYZOJ是由郑州市第十一中学自主研发并开源发布的 ,现在由于大家忙于学业已基本停止更新。我校小朋友 @桥本真希子 准备重启SYZOJ的更新计划。

接下来说一说SYZOJ的故事。

SYZOJ是我的学长chenyao开发的,基于python flask2的开源评测系统,大约是在14年底,SYZOJ最初版本已经在内网运行,据说当时上传了usaco training的所有习题,不过那个版本还非常简陋,几乎只能看题交题,次年年初chenyao重写了整个项目,并且购置了阿里云服务器与域名,备案后SYZOJ正式投入使用,所以算下来,SYZOJ马上要过四岁生日啦!

这个OJ是我看着他长大的,他的成长自然也少不了我的帮助,自OJ正式版发布,我就一直在尝试着帮助建设SYZOJ(比如那个酷酷的图标3就是我设计的!),也慢慢从一开始的口头更新变成了后面的动手实践。16年初,提前进入清华大学实验室的chenyao学长已经无暇顾及SYZOJ的种种,于是我决定接管整个项目,但是我在部署过程中(由于SYZOJ的一些奇怪依赖,导致整个部署过程非常繁琐)遇到了诸多问题,他忙于学习没有及时帮我解决,当时我也忙于备战OI,无奈之下我只能将计划一拖再拖,但是SYZOJ开发组(由十一中热爱SYZOJ,热爱竞赛的热心同学组成,chenyao也是其中一员)已经正式成立=w=

16年下半年,本地的测试版部署成功,并且成功在本地更新了部分内容,本着开源精神,我将更新的内容也push4到github5,此时,SYZOJ的所有权在不久前为了方便调试更新被临时转交到OpenOI6(由Menci7等同学参与)项目组,由于我很早之前就一直在与学长联系OJ的开发事项并且强调过SYZOJ开发组将接管后续OJ开发的全部内容,再加上OpenOI对于SYZOJ的后续开发计划与我们的计划不太一致,无法共同合作,所以同OpenOI的诸位同学商讨后,我们决定将项目重新移交回SYZOJ开发组,并此后由SYZOJ开发组全权负责,至于OpenOI已经更新的部分,可以保留fork8分支继续进行开发,SYZOJ随时欢迎新鲜血液的注入。这个决议得到了双方的赞同,该段内容有聊天记录,不过可能导出比较麻烦,如有需要我将择日导出。

而之后,OpenOI并没有履行我们定下的约定

他们将我们正在更新的版本fork了一份,标为"legacy"9

然后在完全没有注明原开发者与现行维护开发组的前提下,创建了"SYZOJ2"项目

这对于我们来说是无法接受的,一个现行维护的版本,怎么就被弃用并且出现了更新的一代呢?退一万步讲,即使是两个同等地位的开发组同步开发的一个项目,一边在没有告知的前提下硬生生加一个2上去,也不太妥当吧?更何况,此时SYZOJ没有开源协议,也即采用了github最保守最基础的开源协议,我想这也并不符合开源精神。

同时chenyao由于真的太忙了(我的消息有时候都不回T^T),基本不再参与SYZOJ的管理与开发,而相关事项主要由我们其他几位成员商讨决定,包括但不仅限于开源协议、开发计划等,我们最终决定实行简单多数的制度,即假如有新的决议需要开发组半数以上的人同意方可生效。

注意,说句不好听的,由于开发组已经定下的制度,此时的chenyao同学即使是原作者、开发组的一员,也不具有单方面承认SYZOJ其他版本的权力。我们尊重他的决定因为他是一个好学长是一个善良可爱的人,而不是因为此时的他具有对SYZOJ的完全控制权,所以并不存在他授权与否,只存在我们SYZOJ开发组是否授权,他可能在聊天中展现了对帮助SYZOJ添砖加瓦的支持,这也是我们开发组共同的意愿,但绝不是允许他人擅自使用SYZOJ名称商标的意愿。

其实最开始我们投票通过了暂停OpenOI的后续开发,毕竟他们真的做了一些不太合适且让我们很恼火的事情,我们觉得至少他们应该改个名字,别让大家以为我们在开发的是一个过时的版本=。=,但是在佛系chenyao的建议下,最终大家觉得还是佛系一些比较好,在简单与OpenOI的成员交涉后,我们保留了追究OpenOI版权的权力,专心于SYZOJ后续的开发。

于是SYZOJ与LOJ有了相对和平的一段时间,这段时间大家相互交流技术,共同促进,在更新换代评测机期间我也曾与Menci同学联系,帮助LOJ测试,有一个晚上感冒的我顶着39.5度的高烧依然坚持完成了对LOJ评测机的测试,并且指出了一些安全隐患,同样当时的LOJ仍有一些我无法确定的隐患没有一并指出,不知道现今是否成功修复。

年底,由于老版SYZOJ评测机没有沙箱,非常不安全,于是基于seccomp10我开发了一套评测系统,并且正式投入使用,取名为TJudger11,LOJ则使用了速度较慢但是部署简单性能稳定的Docker12,两家在各自的道路上越走越远,几乎没有了交集。偶尔产生一些小摩擦,我们也是选择一忍再忍。

17年,由于种种原因我与chenyao的关系越来越差,几乎隔三差五就要吵架,那段日子我的情绪波动很大,状态也不是很好,于是对SYZOJ的更新处于非常缓慢的状态。17年暑假,我发现在开发组与十一中全体同学完全没有接到通知的前提下,我们学校官方的OJ http://syzoj.com 的系统被更换了,而同时,我的虚拟机里,还放着刚刚测试好没来得及上传没来得及部署的一批更新。

现在那些更新,已经随着往事和我坏掉的硬盘一同飘散了,我不觉得我做错了什么,也不觉得我亏欠了谁,更不觉得这些事情不值得我这么做,只是每次想起自己的付出不被学长尊重,自己带大的孩子竟然被最信任的学长抛弃的时候,难免的心寒与感伤。http://syzoj.com 被更换后,为了高考,我和chenyao互相拉黑了,即使现在我们已经重新加了回来,这一年里,甚至包括现在,每每提起SYZOJ,我的内心还是会闪过一丝刻骨的寒意。

这次更换引起了十一中几乎所有同学的不满,一来是系统使用不习惯,里面有一些冗余不适合十一中的部分,也较于之前版本少了一些必要组建13;二来是这次更换没有经过任何人的同意,没有事先通知。并且由于现在使用的OJ不是官方的版本,没有十一中的同学参与维护,http://syzoj.com 存在一堆奇怪的BUG不知道该如何处理,自己学校的OJ却和自己学校的人没有关系,说出来也是挺可笑也挺可悲的.. 不过毕竟服务器与网站属于chenyao同学,开发组对于服务器和网站内容的更换也无权过问。

所以啊,我觉得这事或许没有谁对谁错,只是我带领的团队缺乏合适的沟通技巧,我也没有处理好与学长和其他开发组的人际关系,说白了算是自作自受吧OAQ,这是经验教训,是以后需要改进的地方,也希望大家引以为戒,不要闷头搞研究,不要闷头做开发。我在之前的回答里已经说过,不希望大家再继续打扰相关人员,就让这件事这么过去吧,我不是宰相,但是该撑船的时候还是要撑船的... 我也不是网红,没啥影响力,只是把自己和SYZOJ的故事讲给大家听,不过怎么说呢,一百个人眼中就有一百个哈姆雷特,我的故事肯定也带有一部分我个人的观点,大家也理性看待吧,我已经尽量保持客观的态度来讲述了。同时希望大家能支持我校小朋友对SYZOJ的后续更新,假如有机会我也会提供帮助。

最后也希望有机会能正式部署对COGS14的更新计划/w.....(这事拖了至少两年了)

有任何疑问欢迎评论区留言或者私信找我,包括但不仅限于官方版SYZOJ的部署,TJudger的部署,TJudger或SZYOJ的技术细节,以及天天的情感经历(删掉)

三点啦,能把这些破事讲出来感觉真好... 大家晚安w

(转载,添加注释,重新添加MarkDown by @Laffey)

文中的注释:

1.即LibreOJ,一个在线评测系统

2.Python Flask:Python中一个常用的web开发框架,知乎链接

3.酷酷的图标~

C02B4692-AD58-4d7d-920E-EAD40FA38C49.png

4.工程开发用语,可以理解成保存对项目的修改

5.全球最大的男酮交友网站(((

好吧其实是个代码托管平台,工程开发用的。

百科链接

6.大概就是这个开发团队的名字罢,并无法搜索到某个叫OpenOI的项目。

7.知乎链接

可以去他的个人网站

8.fork:差不多就是将该项目复制一份的意思,本句意思为可以将项目复制一份分别进行开发

9.有道释义:

  • n. 遗产,遗赠物;遗留问题,后遗症
  • adj. (软件或硬件)已过时但因使用范围广而难以替代的,或已停产的

10.大概是指Linux安全模块seccomp

11.项目链接

12.简单来说基本相当于一个沙盒,可以安全地评测程序,百科链接

13.应为 “必要组件”

14.不太清楚具体是个什么样的项目,Github/Gitee上有不止一个叫cogs的项目