给别人开发软件,但不妥善保管源代码导致灭失,被判承担责任,why?

139 阅读8分钟

【案例导读】

双方在软件开发合同约定,委托方提供软件测试服务器,开发方将源代码等数据部署到测试服务器。其后因为委托方未对测试服务器进行续费,导致软件源代码等数据丢失且开发方无法提供副本,在此种情况下,软件开发方是否应该存在过错,是否应该承担违约责任?最高法院在以下案例给出了答案。

【争议开发阶段】

软件交付验收阶段

【涉及技术问题】

1.软件手机版本、中英文版本开发转化

2.软件测试服务器环境、代码部署、域名解析、兼容性适配、服务器过期数据恢复

3.源代码、目标代码及运维环境参数等数据的交付

【案情简介】

**一、【合同签订及约定】**某教育咨询公司(以下称委托方A)委托某科技公司(以下称开发方B)开发手机APP软件,包括IOS、Andriod两种手机版本以及中文、英语两种语言版本,最终交付内容包括APP软件的UI设计图;APP软件的原型设计图;APP软件的安装包。合同签订后,委托方A租赁了测试服务器,并将服务器管理员账号和密码提供给开发方B。

**二、【合同履行情况】**开发方B收到首付款后,即着手开发工作,并陆续向委托方A交付了软件UI设计图及原型设计图,委托方A随后支付了第二笔款项;开发方B继续开发,同时向委托方A 发邮件称“可以先进行软件主体测试,英文界面待我方列出需要翻译的文档后进行”,随后开发方B通知委托方A,测试版本已开发完成,并将测试后台地址、IOS下载地址、安卓下载地址等相关地址及安装包、后台管理页面等,邮件发送委托方A。

**三、【争议产生】**委托方A接收到开发方B开发的软件后,对软件进行测试,并向其反馈了三次修改意见,开发方B对相应地的修改意见进行了回复或完善。第三次修复并予以回复后,委托方A并未就软件中的具体问题向开发方B进行反馈。后开发方B以邮件形式向委托方A发送了涉案软件的项目验收确认书,委托方A未予回复,未安排验收。随后开发方B告知委托方A,委托方A的英文域名即将到期提醒其去续费,委托方A表示不用续费。因服务器到期委托方A未续费,该服务器上的涉案软件数据被释放,且无法恢复。半年后,委托方A要求开发方B将包括源代码的涉案软件,提交其进行验收。开发方B表示由于你方未续费,现在服务器数据都已丢失,无法提交。双方因此产生争议,委托方A起诉开发方B退还已支付款项并承担违约责任,开发方B反诉委托方A继续支付合同尾款并支付违约金。

**四、【一审法院判决】**某中级法院经审理后认为,开发方B已按双方约定完成开发,虽然未交付源代码,存在瑕疵,但是不影响其交付的软件符合合同要求,开发方B不构成违约。由于自涉案软件第一次交付至本案诉讼时,已经历4年多,软件环境等都发生变化,再加上源代码丢失,涉案合同目的已无法实现,判令合同解除,开发方B不构成违约,委托方A要求其退还已支付款项,无法律依据,驳回其请求;同时由于开发方B未开发英文版本,也未提供后续技术服务,其要求支付尾款请求,也同样驳回。

【最高法院二审裁判要点】

本案第三次重新提交验收后,委托方A未予回复直至半年后要求开发方B再次交付软件,期间因服务器、域名未续费软件数据丢失无法恢复,合同履行陷入僵局。双方对此均存在过错:

1.按照合同约定委托方A附有对服务器、域名支付费用的义务,而委托方A经开发方B提示在到期后没有续费导致服务器关闭;

2.开发方B作为软件开发方,在合同履行中双方仍就涉案软件的开发和修改持续沟通过程中,负有软件数据的保管义务,开发方B在明知部署有软件源代码数据的服务器即将到期,如不续费相关代码数据会丢失无法恢复的情形下,未妥善保管软件源代码等数据,导致服务器保存的数据无法恢复后,开发方也无法提供其保存的副本,亦存在过错。

计算机软件开发合同的履行需要委托方和开发方相互配合,共同推进。就本案合同未能完全履行而言,委托方A负主要责任,开发方B负次要责任。对于双方的互诉请求,应该在双方过错折抵后合理确定。

3. 一审判决虽对违约行为的分析认定不当,但裁判结果并无不当,应予维持。

【实务操作启示】

由以上案例分析,笔者尝试归纳如下启示要点,供委托方和开发者在软件开发合同签订、履行等实务操作中,作为参考:

**1.双方应该在合同中明确约定开发软件的版本。**比如涉及手机APP开发的,应该明确是Andriod 版本还是IOS,还是两者均包括,是否还包括PC端的开发等;涉及除中文外其他语言版本的,应该明确约定软件文档等翻译义务,具体由哪一方承担。对于以上版本约定,应列入《软件功能清单》,并作为合同附件。

**2.合同应该明确约定是否交付源代码以及何时交付。**不能想当然的以行业惯例要求对方(如行业上认为应该交付,但不在合同里明确约定),应该将源代码交付明确写入合同,包括交付形式、交付时间等,对于其他影响软件运行的重要参数,如运维环境参数,委托方认为应该交付的,应该提前对开发方做出提示,并明确在合同中进行约定。

**3.对于未交付的源代码,开发方应妥善保管。**即使部署在委托方服务器或者租用服务器的,也应及时创建副本保存,但能否使用副本进行二次开发,应根据具体情况另行分析,避免因使用产生纠纷。

4.对于涉及软件开发服务器的场景,双方应该在合同中明确约定软件源代码等数据灭失责任的承担。比如软件是部署在委托方或者委托方租用的服务器上,开发方如果能证明自身已经交付了符合合同约定的软件,则相关灭失风险转移至委托方。

【关联知识】

**【反诉】**所谓反诉,是指在民事诉讼中,被告针对原告提出的、与本诉有牵连关系的诉讼,旨在抵消、吞并原告的诉讼请求。

在软件开发合同中,被告提起反诉的情况较为常见。但应注意,是否提起反诉,被告应结合具体场景,谨慎进行评估,因为在某些情况下,提起反诉可能会起到反作用,而且反诉是否会被法院受理,也存在不确定性,法院具有最终决定权。

**【瑕疵交付】**即交付的产品/商品存在瑕疵。

在软件开发合同中,需要正确区分开发者交付的软件,是存在功能缺失还是功能瑕疵。如果合同约定软件应包括三个功能,开发者实际交付的软件只包含二个功能,则属于功能缺失;如果交付的软件包括三个功能,只是部分功能存在bug,通过修改可以修复完善的,则应该属于功能瑕疵。

区分功能缺失与功能瑕疵的意义在于:功能瑕疵并不影响合同最终目的实现,如果委托方以此为由主张开发者构成根本违约的,实践中一般难以得到法院的支持。