前IT工程师律师解释合同审查与调试的相似性
所谓的“公司顾问律师”的主要工作是检查和修改公司每天与客户和业务合作伙伴等签订的合同。这种检查和修改必须由“熟悉法律和业务领域的人”来进行,否则无法充分完成。我将解释为什么。
然而,以下的解释可能对非工程师或没有编程经验的人来说难以理解。Monolith律师事务所是由前IT工程师和有公司管理经验的律师担任代表的律师事务所。这篇文章的定位是“由前IT工程师和公司经理担任代表的律师事务所,针对有工程和编程经验的经理,解释合同检查和修改的内容”。
在这个定位的基础上,合同的检查和修改类似于所谓的“调试”。
- 首先,“bug”是什么
- “调试”是什么样的工作
- 合同如何规定算法
- 修改合同是什么样的工作
虽然对工程师来说这些都是“理所当然”的事情,但我还是会按照这个顺序进行解释。
什么是「错误」和「调试」
“Bug”并不等于“电脑故障”
当我们提到“Bug”,可能有些人会想象电脑在工作时突然冒烟,屏幕显示异常等情况。然而,电脑基本上只会“按照指令”运行。这也适用于Bug的产生。也就是说,“Bug”是指:
- 尽管电脑按照指令运行,
- 但对于使用者来说,这种运行方式是“意料之外的行为”
的现象。
为什么会出现「意料之外的行为」
例如,让我们考虑一下马里奥类型的动作游戏中的「穿墙」bug。
马里奥的跳跃是一个二次函数。加速度、速度、坐标。然而,尽管它是一个所谓的二次函数,例如,我们可以无限细分「X=1.76582时的Y是多少?」这样的问题,但在电视游戏中,我们无法无限细分时间。因为屏幕每秒只能切换30次(例如)。因此,可以说,马里奥每秒「瞬移」30次。
在这个基础上,例如,「马里奥跳跃时,因为上空有墙壁,所以被弹回」的情况是什么样的呢?
- 前一刻,马里奥还在空中
- 下一刻,马里奥的坐标就在墙壁中
就是这样的情况。
在这种情况下,我们可以判断「马里奥在跳跃中撞到了上空的墙壁」。因此,用自然语言来说,就是
如果马里奥的坐标在墙壁中,就执行反弹处理(※1)
如果编写这样的程序,就可以实现「马里奥跳跃时,因为上空有墙壁,所以被弹回」的处理。
※1看起来是正确的,只要按照上述方式编写。实际上,「在一定条件下」,这个处理是正确的。
然而,仔细考虑一下,也可能出现以下情况(※2)。
在这种情况下,不存在「马里奥的坐标在墙壁中」的瞬间,因此不会执行反弹处理,马里奥就会穿过墙壁。
这就是「bug」的例子。即使因为这样的原因出现了「穿墙bug」,也并不意味着PC出了故障。PC只是按照指令进行操作,是人类将这种操作评价为「意料之外」、「bug」。而这个「bug」是由于算法不恰当而产生的。
探讨”是否会发生意外行为”的问题
然而,实际在游戏过程中,上述的”穿墙”是否会发生,仅仅通过抽象思考是无法确定的。”穿墙”是否可能发生,取决于:
- 马里奥的跳跃力(初始速度)有多大,是否存在增加跳跃力的道具
- 墙壁在最薄的情况下有多厚
这些都取决于具体的条件。根据这些条件,是否可能出现类似于※2的情况。如果※2不可能发生,那么※1的程序就没有问题。
「调试」是什么样的工作
因此,为了进行「调试」,也就是找出并修复错误的工作,需要进行以下步骤:
- 理解程序的算法是什么(上述※1虽然是自然语言,但实际上程序是用专有语言编写的,因此阅读本身就很困难)
- 考虑该程序在什么条件下运行(例如,研究跳跃力或墙壁的厚度)
- 考虑在此过程中是否会出现意外的行为
这就是必要的过程。
合同书检查是什么样的工作
合同书的检查与此类工作相似。首先,合同书是为了规定其当事人,即甲乙,预期未来可能发生的事件,以及在此情况下甲乙将产生何种权利和义务,结果双方将如何行动等问题,因此可以说它是“规定现实世界的程序”。例如,
如果发生●●情况,甲应向乙赔偿100万日元。
这样的合同书对未来可能发生的事件进行规定,定义了条件和效果。
然后,对这个“规定现实世界的程序”进行验证,看是否有问题,如果有问题则进行修正,这个过程无疑与“调试”非常相似。
合同书中并未记载算法的全貌
然而,“合同”这个概念对于非法律专业的人来说可能难以理解,但却有一个极其重要的要点。合同书只规定了规范当事人之间的算法的“一部分”。换句话说,仅仅阅读合同书,我们无法知道自己和对方将在何种算法下被规范,无法了解其全貌。
例如,在商店购买二手CD的情况下,商店和客户并不会签订像“买卖合同书”这样的东西,但是,如果购买的CD表面有无法在播放器上播放的划痕,你可能会想要向商店抱怨,而且你可能会期望商店应该会对此作出回应。这不仅仅是因为“这是服务业”的原因,理论上,
- 即使没有合同书,买卖合同也已经签订
- 《日本民法》规定,对于二手CD等(被称为“特定物”)的买卖合同,卖主有瑕疵担保责任
- 因此,商店和客户之间运行的是《日本民法》规定的算法,商店承担瑕疵担保责任
这就是理论。而“合同书”是用来覆盖《日本民法》等法律定义的算法的。例如,如果商店和客户之间有一份“本店不接受任何关于CD缺陷的事后投诉”的合同书,那么,
- 买卖合同已经签订
- 《日本民法》规定,对于该合同,卖主有瑕疵担保责任
- 但是,根据合同书的规定,第二条的原则被覆盖,商店不承担瑕疵担保责任
这就是情况。
合同书是“覆盖”民法等原则的东西
这同样适用于企业间签订的系统开发等合同。例如,如果甲乙双方签订了承包型系统开发合同,
- 通过签订该合同明确地达成了承包合同
- 在承包合同中,根据民法的规定,承包方将承担瑕疵保证责任
- 如果合同中有瑕疵保证责任的规定,那么这个规定将覆盖第二条的民法原则。例如,如果设定了比民法原则更长的瑕疵保证责任条款,那么这个期限的规定就会生效
这就是其结构。也就是说,即使合同中没有特别规定关于瑕疵保证责任,瑕疵保证责任也会产生。
这不仅限于承包和系统开发等,也适用于公司进行的所有合同,如股份转让、债务融资(贷款)、雇佣、股份发行等。
因此,仅阅读合同并不能理解规范对方和自己公司关系的“算法”的全貌。为了理解其全貌,必须理解“民法等法律规定的默认算法”。合同只是覆盖这个“默认算法”的东西。
如果不能预见未来可能发生的事件,就无法进行“调试”
此外,仅理解算法是不够的,我们无法验证“该算法是否会产生意外的行为”。这与游戏的“漏洞”情况相同,算法只是一个抽象的概念,如果我们不能预见未来会发生什么事件,就无法验证“当这些事件发生时,是否会产生意外的行为”。
这对于新的应用程序、服务等产品,新的商业模式等,尤其是一个重要的问题。如果在这些产品或模式中开展业务,未来可能会发生什么。如果没有相关领域的知识,这是很难预见的。此外,特别是在企业之间的合同中,对方企业和自己的企业都是在一定的经济合理性下行动,为了预测未来的事件和导致这些事件的对方的行为,也需要对企业管理有游戏理论的思考。
「意料之外」的判断也基于经营决策
此外,就像判断某个事件是否为「错误」的不是电脑而是人类一样,判断合同带来的某个结果是否「意料之外」的也不仅仅是纯粹的法律问题,而是经营决策的问题。
例如,「依照民法原则」的算法在某个公司的某个业务中可能是无法接受的,这在现实中是可能发生的。虽然这与前面的例子有所不同,但例如,日本民法(Japanese Civil Code)对于委托合同,规定了「受托人再委托将构成违约」的默认算法。但是,例如,对于某个公司来说,某个业务是预期会使用下游企业的。在这种情况下,不能再委托的合同,也就是
- 没有明确说明是否可以再委托(在这种情况下,如上所述,将适用日本民法原则)
- 明确说明不能再委托
即使这是「依照民法原则」的,也应该是无法接受的。
另外,经营总是存在「如果某个原因发生,就要承担责任」的风险。对于自己的公司来说,基本上不存在「没有风险」的合同。是否接受这个风险,最终是经营决策。做出经营决策的是经营者,而不是顾问律师等咨询角色,但咨询者应该提供经营者做出经营决策所需的充足信息,
- 无需一一指出的风险
- 接受将成为该公司的重大决策,可能需要会议等的风险
这些风险,必须加以区分并指出。为了设定这个「区分」,和其他领域的咨询一样,进行合同检查的律师也需要有一定程度的「经营」感觉。
总结
因此,合同审查和修改主要包括以下工作:
- 理解合同如何覆盖《日本民法》等原则,并最终形成何种算法
- 在该算法下,考虑未来可能发生的事件
- 考虑是否会出现意外的行为
以上每一项都是:
- 非法律专业人士难以完成的工作
- 如果不了解该合同所规定的业务内容,例如应用程序或网络服务等业务内容,商业模式等,就难以完成的工作
- 如果不在一定程度上理解相关企业或业务内容,经营感觉,就难以完成的工作
这就是原因。
由于这些原因,合同的检查和修改是非常“专业”的工作。
由我们事务所提供的合同书制作和审查等服务介绍
在Monolith律师事务所,作为在IT、互联网和商业领域具有优势的律师事务所,我们为顾问公司和客户公司提供各种合同书的制作和审查等服务。
如果您有兴趣,请在下面查看详细信息。
Category: IT
Tag: ITSystem Development