看主体想怎么操作了。
问题中的“修改”前提是已经有一个现成的JVM实现,题主想修改这个实现来达到公司特定的目的。
那么答案就是:通过授权获得JVM的源代码后,当然可以在授权范围内进行特殊修改。
GPLv2
以最流行的开源JVM实现OpenJDK中的HotSpot VM为例:
不,我不能说我对GPLv2的理解完全准确,但我简单的理解是:
如果修改是基于GPLv2许可证的JVM实现进行的,只要修改后的JVM没有向“外部”发布,而只是在内部使用,那么JVM的修改仍然需要使用GPLv2许可证,但不需要公开。
修改后的JVM一旦要作为发布给用户的产品的一部分使用,就必须遵循GPLv2的规定,告知并允许用户获取源代码,并给予用户自由修改和重新发布的权利。
比如Google和Twitter基于OpenJDK对HotSpot VM做了大量的修改,但是因为他们从来不会向用户发布修改后的JVM,虽然修改后的代码也是GPLv2授权的,但是没有必要向外界公开修改后的源代码。
Apache许可证v2
以谷歌Android上的两个“JVMs like”为例。Dalvik VM和Android Runtime(ART)属于Apache License v2。这个许可证的条款相当宽松。获得源代码后,只需让修改后的代码也使用Apache License v2许可证即可。许可证不要求公开修改后的源代码,只要求必要的许可证/版权声明。这很好办。
Apache Harmony项目中的JVM实现,DRLVM也是Apache License v2。
商业许可证
甲骨文JDK的HotSpot VM,IBM JDK的J9 VM等。所有都有增强的商业许可证。支付授权费并获得授权后,可以在许可范围内任意修改源代码,无需公开。
例如,SAP和HP拥有从Oracle(原Sun)购买JDK的商业授权,因此它们可以随意定制HotSpot VM,而不需要向公众公开。
同样,比如Apogee软件有从IBM购买J9 VM的授权,可以在J9的基础上定制,不需要公开。