2024-04-19 13:27:33

希泽国际贸易公司与斯高投资公司计算机软件开发合同纠纷案

——计算机软件开发合同根本违约行为的认定

作者   范静波

 

【裁判要旨】

委托方通常应就软件开发存在的技术问题进行举证说明;对于开发成果是否符合合同约定应综合运用文义解释、参考行业惯例及目的解释等方式进行确定;在软件主要功能已经完成情况下,应当认定委托方的合同目的已基本实现。

【基本案情】

2017年12月,上海希泽国际贸易有限公司(以下简称希泽公司)与深圳市斯高投资有限公司(以下简称斯高公司)签订了《企业仓储管理系统技术开发(委托)合同》,该合同约定希泽公司委托斯高公司开发仓储管理软件开发,合同总计款为36万元。涉案合同签订后,希泽公司按约向斯高公司支付涉案合同阶段性款项共计25.2万元,斯高公司向希泽公司交付了其开发完成涉案软件。希泽公司认为,斯高公司向其交付的涉案软件无法正常运行,其行为构成根本违约,诉请解除涉案合同,斯高公司返还其已支付的合同款项,并赔偿违约金7.2万元。斯高公司认为其已按约开发完成涉案软件,希泽公司拒不支付剩余合同款项,故反诉请求希泽公司向其支付合同余款共计108,000元,并赔偿违约金10,562.4元。本案中,希泽公司主张涉案软件微信端(客人)共存在9个功能问题,管理PC端(仓储管理)共存在8个问题,管理微信端(仓储管理)共存在2个问题。经勘验查明,上述部分软件功能存在开发瑕疵、部分功能缺失、部分功能不属于合同约定范围之内的开发功能、部分功能无法勘验。

上海知识产权法院一审判决:一、解除原告(反诉被告)希泽公司与被告(反诉原告)斯高公司之间签订的《企业仓储管理系统技术开发(委托)合同》;二、驳回原告(反诉被告)希泽公司的全部诉讼请求;三、驳回被告(反诉原告)斯高公司的全部反诉请求。宣判后,希泽公司向最高人民法院提起上诉,最高人民法院二审判决驳回上诉,维持原判。

法院生效裁判认为:现有证据不足以证明斯高公司交付的软件具有影响主要功能运行和使用的瑕疵或缺陷,据此认定斯高公司的行为尚未达到根本违约的程度。希泽公司以斯高公司交付的软件不能实现合同目的存在根本违约为由,主张行使合同解除权,依据不足,法院不予支持。从涉案合同履行过程看,斯高公司虽未构成根本违约,但其开发的软件存在一定的瑕疵和部分功能的缺失,具有违约行为;希泽公司未支付剩余合同款项亦存在违约行为,现希泽公司明确表示不同意继续履行合同,合同目的已然无法实现,故判决涉案合同解除并根据双方各自违约程度及合同性质确定涉案合同解除后果。

【典型意义】

软件开发成果所涉公司是否存在技术问题的举证责任,开发成果是否满足合同约定的判断,以及未按约完成开发成果是否构成根本违约是计算机软件开发合同案件审理中的疑难问题。本案判决对上述问题进行了深入阐述,明确委托方通常应就软件开发存在的技术问题进行举证说明;对于开发成果是否符合合同约定应综合运用文义解释、参考行业惯例及目的解释等方式进行确定;在软件主要功能已经完成情况下,应当认定委托方的合同目的已基本实现,委托方以此为由主张开发方的行为构成根本违约不能成立。本案判决对于类似案件审理具有一定的借鉴意义。

一、关于开发功能是否存在技术问题举证责任分配的一般规则

关于开发功能是否存在技术问题,实质上是一个证据判断的问题,而证据判断首先涉及到举证的责任分配。常见的争议问题是:在开发方已经提供了软件成果交付的初步证据,但在诉讼中基于各种原因,导致软件开发成果不能勘验,由此所产生的举证责任应由何方承担。

有观点认为,由于开发方通常是在自己服务器上编写代码再通过合同约定的方式交付委托方,即使因委托方或其他客观原因导致诉讼中已无法提供软件,开发方也应提供备份软件以证明开发工作已经完成,否则应承担一定的不利后果。我们认为,当事人对于案件事实的查明都具有积极的举证义务,但即使开发方在此情形下未提供备份软件,开发方亦不应承担不利后果,否则有违举证责任的分担规则。就一般的委托合同而言,如果受托方已经将标的物交付给委托方,委托方主张标的物有瑕疵,但由于委托方的原因导致诉讼中已无法对标的物进行检验,当然应由委托方承担不利后果。诚然,计算机软件代码具有可复制性,但当开发方在代码已交付委托方后,其在法律上并无备份义务,相应的举证责任仍应由委托方承担。例如,涉案合同约定需开发“申请调仓,有时成功,有时失败”功能。该问题无法演示,且查看之前测试数据亦无法判断该问题是否存在。本院认为,对于软件中存在的技术问题,应由希泽公司举证证明,且涉案软件服务器的用户为希泽公司,其可最终控制软件的服务器,本案中未有证据证明该功能无法演示系由斯高公司的原因所致,故希泽公司应承担不利的法律后果。

二、关于计算机软件开发成果是否符合合同约定的认定

开发成果是否满足合同约定是绝大多数计算机软件开发合同纠纷的主要争点,实践中,开发方常见的抗辩意见主要有两类:一类是委托方所主张的软件存在的技术问题并不存在;二是委托方所主张的技术问题不属于合同约定的开发范围。第一情况属于技术事实的查明问题,在此主要讨论后一种情况。委托方所主张的技术问题是否属于合同约定的开发范围之内,常见的争议又可分为两类:一是委托方所主张的存在的技术问题是否属于合同约定的开发范围之内;二是原合同虽未约定开发某项功能,但在合同履行过程中双方是否就开发新功能达成了合意。

司法实践中,当事人所主张的技术问题在合同中完全未涉及的情形较少,多数情况下合同就相关功能问题使用了抽象或者较为上位的概念进行表述,而委托方所主张的技术问题通常是一个具体的功能问题。因此,判断委托方所主张的技术问题是否在合同约定范围之内,本质上是一个合同解释的问题。

所谓合同解释,即是运用一定的解释方法探求当事人的意思表示。《合同法》第一百二十五条规定,当事人对合同条款的理解有争议的,应当按照合同所使用的词句、合同的有关条款、合同的目的、交易习惯以及诚实信用原则,确定该条款的真实意思。根据上述规定,合同解释的方法包括文义解释、整体解释、目的解释、交易习惯解释和诚信解释。就软件成果是否满足合同约定的解释而言,往往涉及到技术问题与法律问题的交织,在合同解释领域内属于相对特殊的一类,以下结合本案就实践中如何具体运用各种解释方法进行分析。

(1)文义解释。文义解释,主要是指依据合同所使用的词句确定合同中权利义务关系的解释规则。合同解释系以探求当事人意思表示为目的,而当事人的意思表示又是通过语言文字来传达,合同解释通常应以文义解释为基础。由于当事人是根据合同约定行使权利和履行义务,如果脱离文义进行解释,不仅丧失合同解释的基准,而且会导致当事人对合同履行预期不明确。立法者亦认为,合同的条款用语言文字组成,解释合同必须先由词句的含义入手。[1]在司法实务中,最高法院在淄博万杰医院与中国银行淄博博山支行等管辖权异议一案中明确:从合同解释角度来看,当事人对合同条文发生争议时,必须探究当事人内在的真实意思表示,判断当事人真实的意思表示首要方法是判断当事人字面的意思表示。[2]

在对计算机软件开发合同约定的具体功能进行文义解释时,应特别注意有关用语在所述领域是否具有特别意义,如果已有特别意义则不能从一般生活意义上对该用语进行“望文生义”。正如有学者指出:“所谓文义就是该词或者用语在一般的语言习惯上被了解的意涵。唯如该用语或词在法律圈或相关行业已有相约定成俗之特别的其他意涵,那么便以后者为他们的意涵。”[3]本案合同约定需开发 “无法查看历史账单和待出账的账单”功能。斯高公司确认未开发该功能,但认为涉案合同未约定开发该项功能,且希泽公司在合同履行过程中亦未提出开发此功能。本院认为,涉案合同对于“账单查询”的功能说明为“可查看到自己账户下货品的状态以及已产生的费用账单”。显然,“已产生的账单”即为历史账单,故希泽公司主张的历史账单应系合同所约定的开发功能,斯高公司未开发该功能构成违约。至于待出账账单功能,涉案合同未对此进行约定,且不属于此类软件所必须要开发的功能,故该功能未开发不构成违约。

(2)行业惯例。参照习惯或者惯例原则,是指在合同文字或者条款的含义发生歧义时,按照习惯和惯例的含义予以明确;在合同存在漏洞,致使当事人的权利义务不明确时,参照习惯或者惯例加以补充。[4]计算机软件所涉及的功能众多,通常仅会约定软件的主要功能及其子功能,不可能就所有的技术细节进行约定。在对争议的具体技术问题是否属于合同约定开发范围之内时,应当特别注意参照行业习惯进行解释,不能简单地以合同未作明确约定将争议问题排除在合同约定之外。如果争议的具体技术功能属于此类软件通常应具备的功能,或者所述领域内的人员普遍认为合同对此类问题已无需特别约定的,原则上应当认定为属于合同约定范围之内。例如,本案合同约定“‘中文名称’和‘外文名称’都是必填项,但是现在只要填了其中一个就可以提交”。斯高公司认为,中文名称与英文名称不能同时为空,带*的内容为必填项系希泽公司的单方理解,该理解错误且合同履行过程中希泽公司未对此提出异议,不属于功能上存在bug。法院认为,软件页面上标有*的内容是否为必填选项,涉案合同虽未对此作约定,但基于一般商业习惯和软件使用经验,页面中标有的*内容通常是必填选项,且涉案软件页面未对标有*的涵义作其他说明,斯高公司作为专业从事软件开发的主体,其应知晓标有的*内容通常应为必填内容,故本院认为该功能开发存在瑕疵。再如

(3)目的解释。当事人订立合同均为达到一定目的,合同的各项条款及用语均是达到该目的的手段。因此,确定合同用语的含义乃至整个合同内容自然须适用于合同目的。[5]也有观点认为,所谓“目的解释”是一种判断标准而非解释方法,合同目的被用来印证文义解释、整体解释、习惯解释的结果是否正确,当上述解释结论与合同目的相矛盾时,应予否定。[6]本案合同约定需开发的功能包括“扫码客户自提货携带的二维码,即可办理自提出库”“对库存中贴条的二维码进行扫码,可以得知货品信息、拥有者信息”。希泽公司主张,“自提货扫码”“库存扫码”功能缺失。演示该两问题时,扫描二维码得到字符串,后台根据字符串可以找到对应商品。希泽公司认为,扫描结果应该有货品信息和拥有者信息。法院认为,涉案合同对该两项功能的描述分别为“扫码客户自提货携带的二维码,即可办理自提出库”“对库存中贴条的二维码进行扫码,可以得知货品信息、拥有者信息”。上述功能描述并未明确扫描后内容的显示方式,仅描述了“可办理自提出库”及“得知货品信息、拥有者信息”的结果,故扫描结果系字符串本身并不违反合同约定,且该字符串可以找到相对应的商品,能够实现该两项功能所要达到的开发目的。因此,斯高公司对该两项功能的开发不存在违约情形。

三、关于计算机软件开发合同目的实现的认定

计算机软件开发合同纠纷中,委托方以合同目的不能实现主张开发方构成根本违约,并提出合同法定解除是最为常见的诉请,如何认定合同目的是案件审理的重点。

合同目的,首先是合同的典型交易目的,即当事人所欲实现的法律效果。这种典型交易目的在每一类合同中是相同的,不因当事人订立某一种具体合同的动机不同而改变。例如,在买卖合同中,买受人的典型交易目的是取得标的物的所有权,出卖人的典型交易目的是获得价款。[7]就计算机软件开发合同而言,委托方的典型交易目的是取得开发成果;开发方的典型交易目的是取得价款。但在个案中,不能仅从抽象的视角机械地将委托方需取得开发成果简单地作为所有开发合同中委托方的合同目的,而应根据具体情况来判断其合同目的,否则将不能清晰地划定根本违约与轻微违约之间的界限。软件主体功能的实现通常是判断委托方合同目的的依据。在大部分计算机软件开发合同中,委托方合同目的是依约取得开发成果。在判断开发方合同目的是否实现时,应着重判断软件的主体功能是否完成。如果软件主体功能已经实现,个别功能缺失或者存在瑕疵,委托方不能据此主张合同法定解除。本案中,现有证据不足以证明斯高公司交付的软件具有影响主要功能运行和使用的瑕疵或缺陷,不能认定希泽公司的合同目的不能实现,希泽公司以斯高公司交付的软件不能实现合同目的存在根本违约为由,主张行使合同解除权依据不足。

【案例索引】

一审:上海知识产权法院(2019)沪73民初201号

二审:最高人民法院(2020)最高法知民终1064号


[1]《中华人民共和国合同法释义》,全国人民代表大会常务委员会法制工作委员会主编,法律出版社,2013年版,第217页。

[2] 最高人民法院 (2007)民二终字第99号民事裁定书。

[3] 黄茂荣,《法学方法与现代民法》,法律出版社,2007年版,第335页。

[4]崔建远,《合同法》,北京大学出版社,2013年版,第416页。

[5]崔建远,《合同法》,北京大学出版社,2013年版,第414页。

[6]张艳,《论合同解释方法的运用》,《法律适用》,2013年第11期,第72页。

[7]崔建远,《合同法》,北京大学出版社,2013年版,第415页

阅读次数:17495