当前位置:网站首页>嵌入式开发:避免开源软件的7个理由
嵌入式开发:避免开源软件的7个理由
2022-07-03 15:44:00 【粤嵌教育】
可能很多人会认为开源软件是这个行业有史以来最伟大的事情!免费的!我们究竟为什么要避免开源软件?这可能会让一些读者感到惊讶,但是尽管我们热爱“开源”和“自由软件”,嵌入式开发者应该考虑几个理由来证明避免开源软件是正确的。
原因1–意外暴露机密知识产权
开发人员通常认为所有开源软件都是免费的,没有任何附加条件。问题是事实并非如此。开源软件开发人员使用几种不同的许可方案。然而,也有一些许可证要求任何修改,甚至相关软件都要作为开源软件发布。如果没有密切关注,那么开发人员可能会发现他们不得不向外界发布机密代码和算法。自由软件只是让公司付出了披露代码的代价,或者如果他们想受到保护,他们现在需要花钱请律师,以确保他们不会因为使用“自由”软件而放弃一切。
确保如果你要使用开源软件,你要计算律师费用来证明你是清白的。
原因2——专为功能性而非坚固性而设计
开源软件通常是按功能编写的。访问并写入SD卡。通过USB通信。这里的问题是,虽然它的功能代码通常是不健壮的,并期望扳手永远不会扔在齿轮上。这种情况很少发生,尽管软件是免费的,但开发者很快就会发现他们的开源软件只是功能性的,无法承受现实世界的压力。
原因3——缺乏可追踪的软件开发生命周期
软件在发展,但它并没有真正遵循可追踪的设计周期,甚至没有遵循最佳实践。这些不同的嵌入式开发人员实现他们想要的东西,或者将代码推向满足他们需求的方向。结果是软件在有限的情况和环境下工作,用户需要祈祷他们的需求和条件与他们相匹配。
原因4——缺乏自动化或手动测试
是的,这可能是一个棘手的问题,因为有很多工程师和客户不使用自动化测试。一个形式化的测试过程,尤其是自动化测试,对于确保一个代码库是健壮的并且有足够的质量来满足它的需求是至关重要的。但是对于低级固件和嵌入式系统,我们似乎仍然落后于软件行业的其他部分。如果没有自动化测试,我们就无法知道集成开源组件是否破坏了其中的某些东西,直到我们进入生产时才会注意到。
原因5——文档质量差或完全缺乏
文档在已经存在很长时间或者有强大商业支持的开源项目中变得越来越好。尽管由个人驱动的较小的项目倾向于很少或者没有文档。如果开源代码没有文档,将其付诸实践或调试将会是一场噩梦,并且比仅仅获得商业或工业级软件更昂贵。
原因6–缺乏实时支持
很少有什么事情比竭尽全力让某个东西工作或调试却碰壁更令嵌入式开发人员感到沮丧的了。发生这种情况时,解决问题的最佳方式是寻求支持。开源的问题在于,不能保证你能及时得到解决任何问题所需的支持。当然,有论坛和社交媒体来寻求帮助,但这些都是由放弃空闲时间来帮助解决问题的人操纵的。如果他们没有时间去钻研一个问题,或者这个问题不有趣或者太复杂,那么开发者就只能靠自己了。
原因7——整合从来不像看起来那么简单
下载源代码并开始集成。几个月后,整合仍在进行。看似简单的事情很快变得复杂,因为没有使用相同的平台或工具链,必须进行“微小的”修改。
结论
我绝不反对开源软件,在某些情况下,这是非常有用和有益的。重要的是不要仅仅使用软件,因为它是免费和开源的。嵌入式开发人员需要认识到他们的需求、需要和他们产品所需的健壮性级别,并适当地开发或采购满足这些需求的软件。
边栏推荐
- Reflection on some things
- Find mapping relationship
- 软件安装信息、系统服务在注册表中的位置
- Tensorflow realizes verification code recognition (III)
- Reentrantlock usage and source code analysis
- Visual upper system design and development (Halcon WinForm) -4 Communication management
- WinDbg analysis dump file
- VS2017通过IP调试驱动(双机调试)
- Unity功能——Unity离线文档下载及使用
- 自定义注解
猜你喜欢
求字符串函数和长度不受限制的字符串函数的详解
Principles of several common IO models
Unityshader - materialcapture material capture effect (Emerald axe)
Concurrency-01-create thread, sleep, yield, wait, join, interrupt, thread state, synchronized, park, reentrantlock
《微服务设计》读书笔记(下)
函数栈帧的创建和销毁
如何使用 @NotNull等注解校验 并全局异常处理
Microservices Seata distributed transactions
Second kill system 3 - list of items and item details
About text selection in web pages and counting the length of selected text
随机推荐
[daily training] 395 Longest substring with at least k repeated characters
Atlas atlas torque gun USB communication tutorial based on mtcom
Jvm-04-runtime data area heap, method area
GCC cannot find the library file after specifying the link library path
一些事情的反思
Visual host system design and development (Halcon WinForm)
socket. IO build distributed web push server
How are integer and floating-point types stored in memory
从 flask 服务端代码自动生成客户端代码 -- flask-native-stubs 库介绍
XWiki Installation Tips
找映射关系
Concurrency-02-visibility, atomicity, orderliness, volatile, CAS, atomic class, unsafe
Popular understanding of gradient descent
[200 opencv routines] 217 Mouse interaction to obtain polygon area (ROI)
Using multipleoutputs to output multiple files in MapReduce
自定义注解
Detailed explanation of string function and string function with unlimited length
Microservices - load balancing ribbon
Location of software installation information and system services in the registry
秒杀系统2-Redis解决分布式Session问题