如果我将我的 ruby 代码放入 gem,它的源代码安全吗?

If I put my ruby code into a gem, is its source code secure?

我的理解是,当我制作 gem 时,我正在将我的 ruby 代码编译成某种形式的可执行文件,对吗?这是否意味着除非有人使用内省技术(这对我来说是可以接受的风险),否则我的源代码是安全的?

我觉得

gem unpack

可以提取您的代码。从未尝试这样做并查看它是否 "human-readable" 但您可以在发布 gem 之前尝试它 ;)

A gem 不是已编译的可执行文件。它根本没有编译。 Ruby 被解释。创建 gem 只是将必要的文件捆绑在一起,很像 zip 文件或 tar 存档。

如果你想让你的 gem 安全,你应该把它放在 rubygems.org 之外。您可以设置自己的私有 gem 服务器,或者您可以只将 gem 包含在需要它的项目中。

虽然可以使用 Ruby's C API 将 Ruby 代码编译成可执行文件或共享库,但这与 gems 无关。

A gem 只是 Ruby 代码(可以是常规脚本或编译库)的集合,在一个很好的包中与 rubygem 一起使用包管理器。 hide/protect 代码没有任何努力。

Its my understanding that when I make a gem I'm compiling my ruby code into some form of executable, right?

没有。它只是一个带有一些元数据的压缩文件。压缩文件的内容正是您放入其中的内容。

Does this mean that unless someone used introspection techniques (which is an acceptable risk to me), my source code is secure?

这取决于您所说的 "secure",但与 RubyGems 完全正交。

如果您的意思是 "it can't be stolen",那么版权法已经为您提供了保障。除非你生活在一个非常奇怪的国家,否则从你编写软件的那一刻起,软件就会自动受到版权保护。

如果你的意思是"cannot be reverse engineered",那是不可能的。如果您希望人们能够 运行 您的程序,那么您必须以 CPU 可以理解的格式将其提供给他们。人类比计算机聪明得多,所以,如果程序可以被CPU理解,那么它也可以被人类理解。

有两种常见的解决方法,我称之为 "Nintendo way" 和 "Google way"。

任天堂的方式是给用户 CPU 以及程序,因此用户的 CPU 不必理解它。但是,该模型仍然存在缺陷。只要你给用户一些东西,他就能搞定。到头来全是数学物理,能看懂。用户非常聪明。请注意,例如,大多数游戏机 不是 被试图窃取代码或盗版游戏的邪恶犯罪集团破解,不,它们被想要 运行 Linux 或 BSD 在他们的硬件上。

Google 方式是给用户什么。您在搜索框中键入内容,Google 会将结果发回给您,但软件绝不会离开 Google 的数据中心。