构建物联网产品 - 避免共享内部专有代码的最佳方法是什么?

物联网 硬件 ubuntu 核心
2021-06-16 00:59:25

我认为我很难制定标题。但是,我仍然可以在这里更详细地解释我的问题。

我正在设计一个由云服务和嵌入式硬件组成的嵌入式产品。云服务将有一个 REST-api(虽然它可用不是卖点)并且它将与嵌入式硬件进行通信。理想情况下,嵌入式硬件还应具有类似 REST 的通信接口。问题是为它找到好的软件堆栈(或者这就是我认为的问题所在)。

我认为最好的选择是某种嵌入式 Linux 发行版,其中安装了自己的 Web 应用程序(Ubuntu Core + Django...?)。是否有可能在商业产品中使用这种组合,但同时保持 webapp 内部关闭?

Ubuntu 网站提供了多个受支持的平台,其中一些看起来非常适合我的用例。就像我之前说的,我目前主要关心的是许可。

1个回答

首先,请注意,我不是律师。如果您认为需要法律建议,请获取一份。许可就是我推荐的领域之一。

开源许可证允许的内容差异很大。让我们以您在项目中使用(未修改)的库为例。您可能会发现两种常见的许可证是 GPL 和 LGPL,它们处理此问题的方式各不相同。这篇文章,例如:

GNU 项目有两个主要许可证可用于库。一个是 GNU Lesser GPL;另一个是普通的 GNU GPL。许可证的选择有很大的不同:使用 Lesser GPL 允许在专有程序中使用库;对库使用普通 GPL 使其仅可用于免费程序。

在这方面更开放的其他许可证示例包括 MIT 和 BSD。

许多 Linux 软件都是 GPL,这可能包括您选择的任何操作系统的组件(例如 Ubuntu Core)。但是,只要您的项目不被视为这些项目的衍生作品,您就不应该受到影响。此答案中的更多信息

从这个角度来看,为您的产品使用 Ubuntu Core 不应该影响您在其上发布的应用程序是打开还是关闭。实际上,将应用程序打包为 snap 是分发二进制 blob 的好方法。

您可能已经考虑过这一点,但从技术角度来看,如果您使用 Django 发布 Python snap,则 snap 不会是二进制 blob——默认情况下,您的代码将放在那里供任何想要查看它的人(或者通过转储磁盘内容或以某种方式获得 shell 访问)。您可能想要混淆或发送字节码,等等。