思考:开源软件的开发过程,以及商业使用 (*****)

2023-11-16

明确软件的具体用途、功能、以及迭代的各种边界

如果不将所需的软件进行集合化,那么,像 github 中的软件那样,自己去搜索、筛选、测试等等,这是一件很耗费时间和精力的事情。

编写和筛选各种所需的库,或其他

优先筛选已有的、现成的开源库,以及符合要求的 license;

没有现成的,则需要自己编写。

需要统一风格:各种所需软件的集合,风格各异,千奇百怪

优先通过接口适配的方式,来使用现成的开源软件。

因为软件的维护与迭代,是一件很耗费时间和精力的事情,让原作者去维护,总好过自己来维护;除非原软件有 bug 需要修改。

千奇百怪的软件风格,会造成学习和使用的成本很高,因此,需要统一软件的风格,和使用思维。

将各种软件集合化的价值和意义,何在?

节约了时间成本。

使得软件产生了新一轮的迭代。

就像厨师一样,每一样的食材,都不是厨师自己的创造发明。

但是,有人只能将食材煮熟,一般而言,味道比生吃的好;

有人集合能力强,成了五星级酒店的厨师;有人集合能力差,只能在小饭馆做事。

并且,在集合的过程中,总是有着集合者的能力和其他因素在里面,有时是不可复制的;否则的化,那么,所有的食材,只要按照同样的配方,大家都可以轻易地成为五星级酒店的厨师了。

在大多数的场景里,集合,并不是简单地组合。它们同样包含了集合者的创造能力在里面。

否则的话,同样的山寨机,大家就没有什么差别与不同的了。

开源软件的来源

现存程序员,或机构,出于各种各样的目的,开放的源代码。

即将离去、或已经离去的程序员,通过开放代码的形式,以另一种方式存活于人间。

Qt 的改造

在 Qt 的社区版中,有些第三方库,是采用了 GPL license;意味着要商用这些代码,就必须将所有被传染到的代码,全部都要开源。

那么,换一种思路,凡是 Qt 采用了 GPL的库;如果无法规避,那么,使用者全部将它们更换为其他适合商用的第三方库,或者自己通过重新编写取代那些 GPL的库,这样也是可以闭源商用的吧?

然而,如此一来,就意味着需要增加时间和精力的投入,去更换、适配和测试等等。

开源,免费,值得尊重!但是,对于开源,却不免费,这种行为,其实,并没有什么好指责的

假如人类能够不用吃饭、穿衣、住房、旅游,就能够很好地生存、与不断地进步,如此的话,那么,收费才是可耻的。

并不是所有的原始开源者,都要求使用者要开放其源代码,这就是为什么会有那么多不同种类的 lincense。

既然原始开源者都没有要求使用者必须开源,那么,只要符合 license链的规定,此时的闭源,是合法的。

综上所述,开源的,商用可以,但必须也是开源的。商用闭源,大多都是收费的。

开源与免费,并不能划等号。具体要看用途。商用大多都采用闭源,而闭源一般都是收费的。

一般而言,商用需要采用闭源,否则,遍地都是竞争对手,怎么赚钱?

然而,世事无绝对:st 开源,也能免费商用,并且,st 还能赚到大量的钞票。原因无它,因为其盈利的部分,不是软件,而是硬件 MCU。MCU技术才是 st赚钱的关键,这是闭源的,赚钱的关键部分,并不会公开。

责难者,与其去指责那些开源收费的行为。

责难者,还不如首先设法:让那些被责难者可以免去对衣食住行依赖的麻烦,之后,再去指责那些开源收费的行为。

开源和收费,是促进软件事业健康与进步的两个方面。

全面开源,或全面收费,都是不现实的,都不利于软件业,甚至可以说是整个科技事业的不断发展与进步。

GPL 的商业使用

GPL 对于有些商业模式,是有意义的。

比如 Qt、MiniGUI 之类的软件。

MiniGUI 采用了 GPL license,意味着要商业使用这些原代码,就同时必须开源;而开源又不利于商业化,怎么办?这就需要购买 MiniGUI 的商用版本了,

特别注意:以上论点,可能是错误的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

思考:开源软件的开发过程,以及商业使用 (*****) 的相关文章

  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的

随机推荐

  • 给一个正整数n,求出位数。并按正序输出,逆序输出

    求出位数 思路 通过让给定的正整数n整除10 且每整除一次让统计位数的变量count自增一 返回count得到位数 include
  • 华硕主板固态硬盘不识别_[主板] 开机后无法识别硬盘或SSD的故障排除方式

    1 尝试更新官网最新的BIOS版本 可参考FAQ 华硕EZ Flash 3 介绍 2 在计算机开机后 立刻按压键盘上的 delete 键 在BIOS EZ Mode 页面的 Storage Information 字段 确认是否可以显示所接
  • 使用EasyExcel生成表格并且返回File对象

    通过此方法 可以导出表格并且存入File对象中进行其他的操作 这里通过File来进行异步存储到文件服务器 用于下载中心 public static
  • myeclipse10配置tomcat详细过程

    首先确保你已经成功的安装 了myeclipse10和tomcat 我用的是tomcat6 1 在myeclipse10中添加tomcat 选择属性preferences之后进入配置框 选择servers下的tomcat6 视你自己的版本而定
  • 【翻译】软件表现不佳,未来取决于这种情况的改变

    如果一件事不能永远进行下去 它就不会 赫伯 斯坦法则 科技行业的未来会是什么样子 从现在到2030年 我们所有人面临的挑战不再是我们将如何说服世界 或更直接地说 我们的老板或客户 成为碳零 无论我们是否愿意 这都会到来 我们的新问题是 作为
  • 如何阅读他人的项目源代码程序

    阅读他人的项目源代码步骤 备份并编译运行代码 熟悉项目编程语言的语法和惯例用语 看项目文档 有机会可向项目开发人员请教 自上而下构建项目程序的系统架构 建立系统架构和功能逻辑之间的关联 核心代码重点剖析与注释 调整心态 反复阅读 工欲善其事
  • Vue3只读代理---readonly、isReadonly、shallowReadonly

    readonly 获取一个对象 响应式或纯对象 或 ref 并返回原始代理的只读代理 不能给属性重新赋值 只读代理是递归的 访问的任何嵌套 property 也是只读的
  • springmvc源码学习(二十四)异步请求管理器WebAsyncManager初始化

    目录 前言 一 WebAsyncManager初始化 二 参数的初始化 三 自定义参数 总结 前言 Springmvc的异步执行请求是有异步管理器WebAsyncManager来控制的 一 WebAsyncManager初始化 1 在请求到
  • 大数据--Hadoop环境部署(4)Hadoop集群部署

    Hadoop集群的部署方式分为三种 分别是独立模式 Standalone mode 伪分布式模式 Pseudo Distributed mode 和完全分布式模式 Cluster mode 独立模式和伪分布式模式主要用于学习和调试 完全分布
  • 数据圈最全的数据分析&产品文章合集

    关注公众号 回复 进群 与3万 数据人交流 公众号介绍 一个数据人的自留地 成立于2020年2月25日 目前发表原创300 篇 拥有3万 粉丝 交流群10 个 连载数据产品 数据分析 画像标签 策略算法 运营增长 求职面试等20多个方向的文
  • Spring Boot Kafka - 序列化和反序列化JSON

    文章目录 Spring Boot Kafka 序列化和反序列化JSON 前言 配置JsonSerializer和JsonDeserializer 定义一个Model类 Producer类 Consumer类 Controller类 测试 小
  • EMNLP 2020 Beyond Instructional Videos: Probing for More Diverse Visual-Textual Grounding on YouTube

    动机 从无标签的网络视频中进行预训练已经迅速成为在许多视频待处理任务中实际获得高性能的的手段 通过预测语音内容和自动语音识别 ASR token之间的grounded关系来学习特征 然而 先前的训练前工作仅限于教学录像 作者希望这个领域是相
  • 1.uniapp全局状态管理

    概念 把多个组件之间共享数据抽离出来 通过一个 单例模式 进行管理 工具 具备全局状态管理的库 Vuex 全局状态管理中的库 步骤 1 建立Store文件夹 2 建立index js文件 3 在main js中注册Vue插件 4 测试Vue
  • POI实现word转HTML!呵呵!!!

    那些说POI把word转HTML如何如何完美的人们 copy东copy西 有想过转出来的格式与word不一致么 唉
  • 动态规划法--求数组中最大子集合的和

    例题 给定一个数组int a 9 1 3 5 1 7 5 3 1 计算数组中连续的最大和以及出现的位置 输出 下标1到5位连续的最大和为15 首先看到这种题目 我的第一反应 就是用冒泡排序的思想去做 public class zuoye p
  • A*自动寻路算法—java版(八方向版)

    上一篇博客分享了Java版的自动寻路 但是只是上下左右四个方向的 今天把八方向的也分享出来 既然四方向的已经成功了 那么改进成八方向的 只要注意两个地方就可以了 一个是获取四周方块的时候 一个是移动的时候 一 获取四周方块 在autofin
  • Centos 配置yum 的几种方式、

    一 yum 的 基础运用 1 命令形式 yum option command package 选项 option h 帮助 y 直接安装的意思yes q 不显示安装的过程 其他的可以通过 yum h 查看 同样 command 也通过 yu
  • 机器学习之基于LDA的人脸识别

    目录 LDA降维 思想 matlab代码 fisherface 思想 matlab代码 人脸识别 思想 matlab代码 LDA降维 思想 首先 代码通过使用dir函数获取指定路径下所有以 bmp 结尾的文件 并存储在变量pictures中
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题

    如果这篇文章能帮到大家 并且你也想了解程序员的 副业 请关注博主的微信公众号 程序员副业笔记 因为maven私服挂了 无法下载jar包 通过阿里云公共仓库下载的jar 然后放入本地仓库后 还是无法引用 打包报错 百度了一下问题的解决办法 因
  • 思考:开源软件的开发过程,以及商业使用 (*****)

    明确软件的具体用途 功能 以及迭代的各种边界 如果不将所需的软件进行集合化 那么 像 github 中的软件那样 自己去搜索 筛选 测试等等 这是一件很耗费时间和精力的事情 编写和筛选各种所需的库 或其他 优先筛选已有的 现成的开源库 以及