【软件开发】我让你用什么编程语言开发,你就得用,否则你会拿不到费用的【案情简介】
一、【合同签订及约定】某公司(以下称委托方A)委托某科技公司(以下称开发方B)开发手机APP软件,合同约定“开发方B保证给委托方A开发的APP为原生语言开发”。二、【合同履行情况】开发方B收到首付款后,即着手开发工作,并陆续向委托方A交付了软件开发包、源代码、数据库、接口文档及注释等文件,开发方B还代为委托方A进行了软件著作权登记。三、【争议产生】委托方A向开发方B支付了全部开发款,但涉案APP并未上线运营。对此双方各执一词,委托方A认为:开发方B未将软件部署到服务器上,无法进行测试,故委托方A并未对该软件进行验收;其使用原生语言开发工具无法打开开发方B所交付U盘内的源代码,经委托方A技术人员与开发方B沟通,得知系混合开发,开发语言使用了Vue、Html5。开发方B则主张:其测试发现涉案APP软件可以正常打开。因委托方A以其自行做二次开发为由要回所有软件材料,才没有协助委托方A进行上线应用。委托方A接受软件开发材料即代表验收。其开发工作可能用到第三方组件,诸如地图、支付、定位权限,但都是在Java范围内,仍属于原生语言。开发方B向法院提交了申请著作权登记时向国家版权局提交的60页源代码,用以证明涉案APP软件系使用原生语言开发。一审法院认定:1.涉案软件采用混合语言开发。理由:涉案APP软件开发中除了使用原生语言,还使用了Html5、Vue等,这是典型的混合开发方式;使用涉案APP软件的过程中涉及到较多的网络通信和数据传输,这也是混合开发APP软件的一个重要特征。2.非原生语言开发能够实现涉案合同目的。理由:编程语言只是开发工具,表达编程思想的数据结构和算法才是开发的核心。涉案合同虽然约定使用原生语言开发,但就其《附件》约定的涉案APP软件所需实现功能来看,并不存在使用完全的原生语言开发的必要性。........。五、【最高法院二审判决】撤销一审判决,解除双方签订合同,开发方B向委托方A返还全部开发费用并支付资金占用利息。【最高法院二审裁判要点】
二审诉讼过程中,开发方B虽未提出上诉,但其对原审法院认定涉案APP软件属于混合开发持有异议,且考虑到原审法院未能就涉案APP软件的开发语言进行勘验或鉴定,二审法院对委托方A目前持有的涉案APP源代码编写语言情况进行了勘验。勘验结果显示:涉案APP前端程序使用的开发语言为Html、JS(JavaScript)和CSS三种,无Java语言。........。1.开发方B未按涉案合同约定使用特定语言进行APP软件开发,构成违约。涉案APP软件开发过程中实际使用的语言包括Html、JS、CSS,也可能还存在开发方B自称的Vue、PHP等,但均非委托方A与开发方B签约时就已确定的原生语言,即就安卓系统而言限定为Java,就IOS系统而言限定为Object-C。.......。2.开发方B未使用合同约定的原生语言开发,导致合同目的无法实现,构成根本违约。涉案合同明确约定APP软件的开发语言为原生语言,则开发方B应依约使用合同限定的语言进行开发。开发方B作为开发方,掌握软件开发技术,其对涉案合同中关于开发语言的特别约定具有充分的认识理解能力,并负有更高的注意义务。若开发方B认为全部使用原生语言开发存在诸多缺点或并无必要,使用多种语言混合开发具有更大优势且为目前主流模式,其应当在签约前向委托方A提出建议,或在开发过程中征得委托方A同意;否则,其仍应依约使用原生语言进行开发。通过比较原生语言开发与混合开发各自的特点可知,改变开发语言能为开发方B带来缩短开发时长、减少开发工作量、降低开发成本的好处,却违反了委托方A在涉案合同中对开发语言提出的明确要求,且使委托方A想要达到的涉案APP运行速度快、安全性能高、用户体验好、抢单成功率高、客户端硬件设备调用充分的合同目的无法实现,因而构成根本违约。原审法院未能查清涉案合同专门约定开发语言的特殊目的,也未考虑到不同开发语言对APP运行状况及其进一步商业使用的影响,仅以基本功能均能实现为由认定涉案合同目的已经实现,缺乏事实依据和法律依据。即使出于避免开发成果浪费的考虑,开发方B也只能以协商方式解决已开发完成的涉案APP软件接收事宜,而不能强迫委托方A接受与合同约定开发语言不符的APP软件。