精华内容
下载资源
问答
  • 开源代码
    千次阅读
    2021-02-25 14:43:04
    **本文内容基于作者个人对相关技术的理解,难免有偏颇遗漏之处,敬请各位指正。本问中的观点仅代表作者本人!**
    

    开源代码检测的目的和方法

    目前,开源代码可以说是无处不在,几乎所有的软件中都有开源代码的身影。在现在的软件编程中,代码引用极为常见,很少有哪个编程人员敢说自己编写的软件中的每一行代码都是自己写的,基本所有的软件都会或多或少的引用外部代码,这些外部代码中大部分都是开源代码(OSS)。
    使用开源代码的好处很多,但也会带来风险,为了更好的使用开源软件,发挥开源软件的价值的同时又避免其带来的风险,就要对使用的开源软件进行一定的管理,而开源软件管理的基础就是要弄清楚你使用了哪些开源软件,而要弄清楚软件中究竟用了哪些开源代码,通常是件很难的事情。为了发现软件中存在的开源代码,以及由这些开源代码引入的风险,需要对软件代码进行检测。如果想全面准确的找到软件中的开源代码和风险,用人工的方法是不可能的,一般都会使用检测工具来进行这项工作(因为开源代码的总规模是个天量,没有人能知道所有的开源代码,而且现在的软件产品的代码规模通常也很大,用人工方式去阅读所有代码也是不现实的)。
    要实现有效的开源代码检测,对检测工具的要求至少有以下几个方面:

    1. 全面、准确发现软件中的开源代码
      这是基础的要求,只有全面准确的检测出软件中的开源代码,才谈得上分析其中的风险。要实现这一点,不仅需要全面准确的开源软件数据,还需要好的检测技术和分析算法

    2. 准确、详细的开源代码风险信息
      检测出开源代码的同时,还要能分析和展示这些开源代码的风险信息,这需要开源代码检测工具的拥有全面准确的开源软件数据

    3. 持续跟踪并发现新的风险
      每个开源软件都是在不断变化的,其风险也不是固定不变的,开源代码检测工具还要能够持续的发现新的风险,这其实是对开源检测工具的数据更新能力的要求。

    开源代码扫描检测技术简介

    前面已经说过,开源检测工具的优劣主要和三方面相关,即:开源软件数据的准确性与全面性、分析检测的技术、数据更新能力。在数据的准确性与全面性、以及数据更新能力方面,各款工具都标榜自己的知识库是最全、最大、最领先的,也都说自己的数据更新非常及时等等。因为缺乏详细的数据进行对比,所以本文先搁下这些方面不谈,只讨论一下开源代码的检测分析技术。
    目前存在两种主流的扫描检测技术:代码特征分析比对技术代码依赖关系分析技术。在具体分析这两种技术之前,我们先举个例子:

    比如有一种饮料,我们想知道其中都含有哪些化学成分,我们可以通过解读饮料包装上的成分表去了解,也可以通过对饮料本身做各种化学实验分析去得到。在开源代码检测分析中,代码依赖关系分析技术就类似于成分表解读的方式,而代码特征分析比对技术就类似于化学分析的方式。

    技术一:代码特征分析比对

    代码特征分析比对技术的本质是比对两份代码中是否有相同的部分,该技术时对软件源码中的每一个代码文件进行分析和比对,该技术其实不只用于检测代码中是否有开源代码,也可以用于代码同源检测等领域。其工作的基本原理如下:

    代码文件A 	--(特征提取)-->		特征a
    代码文件B	--(特征提取)-->		特征b
    如果a=b,则A和B的内容一致,即:A=B。
    

    这和我们用MD5值验证下载文件的完整性的方法是类似的,只是检测工具在进行代码特征比对分析时要批量处理文件、批量比对和展示结果。

    另外,不同的工具其特征提取的方法也不相同,有些只提取整个代码文件的特征,这种方式只能分析出

    “A=B 或者 A≠B”
    

    而有些工具不仅提取整个代码文件的特征,还对其中的代码片段提取特征,从而不仅能分析出

    “A=B或者 A≠B”
    

    还能分析出

    “A中的部分内容 = B中的部分内容”,
    也就是“A≠B,但A和B中存在相同的代码片段”。
    

    在开源代码扫描检测中使用代码特征分析比对技术时,如果想获得好的效果,取决于以下几个方面:

    • 代码特征提取技术
      如何提取一个代码文件的特征、提取的粒度如何,会直接觉得比对结果的准确性和精确度。
    • 代码特征比对技术
      对两个代码文件的特征进行比对的方式,会影响到比对结果的全面性、比对的效率、以及后期对结果进行筛选和确认的难易程度和准确程度。
    • 代码特征库的质量
      代码特征库就是用来比对用户代码特征的数据源,数据源的全面性和准确性,决定了比对结果的全面性和准确性。
    • 代码特征提取与比对的效率
      在保证全面和准确的前提下,尽量高的比对效率也是非常重要的。

    技术二:代码依赖关系分析

    代码依赖分析技术是基于分析软件中依赖的外部组件列表来分析软件中使用的开源代码,该技术是针对整个软件进行分析的(或者说是对软件中记录依赖关系的文件的内容进行分析,比如Java 代码中的.pom文件),而不是针对每一个代码文件进行分析,其工作原理如下:

    软件A 
    --> 找出A中的依赖关系列表文件 
    --> 读取依赖关系列表内容(B,C,D) 
    --> 得出软件A中引用的开源软件(B,C,D)
    

    不同的检测工具在实现时也有所差别,有的工具不仅能分析出A 中列出的直接依赖的开源组件,还会对依赖的外部开源组件进行递归分析,得出类似于下面这样的结果:

    软件A,依赖:
    -> 软件B,软件B又依赖:
    	--> 软件E
    	--> 软件F
    -> 软件C,软件C又依赖:
    	--> 软件G
    -> 软件D
    

    代码依赖关系分析技术的效果主要取决于:

    • 对代码中引用外部组件方式的识别能力
      各种语言代码对外部组件的引用方式是不同的,工具要支持对更多种类语言的代码进行识别和分析。
    • 递归分析的能力
      只分析出软件中直接依赖的外部开源组件往往是不够的,需要对这些外部开源组件进行递归依赖分析,最终找出软件中引用的全部外部开源组件。
    • 对代码伪装的甄别能力
      代码依赖关系表是易于伪造的,在有些应用场景下(比如检测机构对送检的软件产品进行评测),如何去伪存真是一个难题。

    两种技术的对比

    上述的这两种技术各有利弊,需要根据您的具体需求和应用环境来选择。这两种技术各自的特点对比如下:

    • 代码特征分析比对技术

      优势:
      1、分析的准确性高
      2、能发现直接引用的开源代码片段
      3、不容易被欺骗
      
      不足:
      1、分析速度相对较慢
      2、经常会比对出多个结果,结果的筛选和确认有一定难度
      
    • 代码依赖关系分析技术

      优势:
      1、分析速度快
      2、分析结果唯一,不用筛选和确认
      
      不足:
      1、无法识别直接引用的代码片段
      2、容易被欺骗
      

    以上对这两种技术的对比分析,是基于这两种技术本身的特点来说的,分析的是这两种技术本身的差异,而非使用这些技术的开源代码扫描检测工具之间的差异。使用不同技术的开源代码检测工具之间,因其在技术水平、开源软件数据库质量等方面存在差异,其检测能力也存在差异,不能简单的说使用某种技术的工具就一定优于使用另一种技术的工具;即使是使用相同技术的两种检测工具之间,其检测能力通常也有不小的差别。

    更多相关内容
  • 这是工业通信modbus的免费开源代码,主要用于工业通信协议开发人员,参考学习之用。代码比较全,支持linux和arm处理器。
  • 这是datav大数据可视化的开源代码,内含有datav架包,还有一个例子
  • 用了一年时间认真的看了一遍,真是经典,Windows内核方面的入门书籍
  • 如何有效的阅读开源代码

    千次阅读 2020-06-25 08:26:55
    2.开始阅读框架的源代码之前,先去google搜集下资料: 这个框架是解决了什么问题?都是用了什么技术? 分为多少个模块,每个模块之间有什么联系? 尽量看官网英文的资料,因为中文技术博客的内容很多是错误的。 ...

    目录

    零、开源项目是什么?

    开源项目不仅仅是开放源代码,起码要满足四点:

    一、初步了解

    1、走读官网文档(至少一遍)

    2、了解代码目录结构

    3、在安装部署前补充新概念、新技术

    二、安装部署,运行(很重要!)

    2、1 成功运行并简化环境

    2、2 成功运行意义何在

    三、运行并研究Example例子

    3、1 最简单的入门例子

    3、2 逐步研究更复杂的例子

    3、3 手写个人demo

    四、针对部分组件,阅读其测试用例

    五、阅读源代码之前必读

    5、1 看代码之前认真看文档

    六、阅读源代码

    6、1 明确阅读代码的目的

    6、2 区分主线和支线剧情

    6、3 挑选感兴趣的“分支”来阅读

    6、4 理清核心数据结构

    6、5 添加日志 and 单步调试(情景分析)

    6、6 画图梳理逻辑

    6、7 解决遇到的问题

    七、写笔记记录想法,促进思考和总结

    八、抄写项目源代码

    九、仿写项目

    十、教给他人(输出知识)

    更新日志:

    阅读开源代码,一上来就陷入技术细节是大忌!!!

    参考链接:


    零、开源项目是什么?

    开源项目不仅仅是开放源代码,起码要满足四点:

    1、开发项目中所有源代码以及配套工具

    2、完善的文档,如新手入门文档、项目整体架构设计文档、模块的详细设计文档、配置说明文档以及注意事项。

    3、活跃的社区

    4、持续的更新和完善

    一、初步了解

    1、走读官网文档(至少一遍)

    有多少人愿意花时间好好看官网文档的?估计很少,大家一上来就是开始撸代码,强撸!!!

    常见的几种错误:

    1) 一头扎进代码细节,直到怀疑自我

    我国的教育体系主张研究透底层机制后,才开始动手实践,其实并不然,俗语:“知其然,然后知其所以然”,学技术也是如此,先知道大概是什么样,然后才能逐渐的研究其原理。

    人的认知过程是从观察、模仿、亲身实践、总结经验或教训,然后逐渐学会一项技能,此技能练习千百次,才慢慢窥探到其底层原理。

    一个人想直接透过问题表象看到问题本质,是很难的。

    2) 未阅读完操作文档,就着急动手实战,得不偿失

    为赶项目进度没好好看文档就匆匆忙忙的撸代码,代码运行后有很多稀奇古怪的问题,再回过头来排查这些问题,发现是自己的使用方式有问题,而这些在文档中已明明白白的写的很清楚。

    3) 多参与开源社区,闭门造车要不得

    虽然网上的技术博客,专栏,公众号平台或视频课程都会针对某个技术做讲解,但是我依旧推荐

    推荐你看官网的一手资料

    为什么这么说呢?

    时代在发展,开源软件也在不断的进化,,从时效性和内容准确性上都要比中文技术博客的内容要好的多。

    重点关注下Get Started和Example之类的文档,能够帮助更快的入门。

    重点看文档中什么内容:

    1、开源项目背景

    采用了什么技术?

    提供了什么功能或特性?

    解决了什么问题?

    2、适用场景

    优点是什么?

    缺点是什么?

    适用于什么场景?

    不适用什么场景?

    明确了适用场景,才能在架构选型时有的放矢。

    3、哪些公司在生产环境中使用

    有多少公司在生产环境中部署并维护过此开源项目?

    一方面经历过生产环境的项目质量相对较好,即使有bug其他公司或多或少也遇到过,自己解决起来不至于孤立无援。

    可以从侧面证明项目很有潜力和竞争力。

    2、了解代码目录结构

    在下载源代码之后,先看下代码目录的组织结构,可先从示例代码或测试代码入手。

    base代表基础库

    net代表网络库

    demo/example代表示例代码

    tests:测试代码

    docs:文档目录(类图,流程图,活动图,业务知识相关资料等)

    入手之初,建议从例子代码或测试代码开始看(demo,example,test)

    3、在安装部署前补充新概念、新技术

    在已有的知识体系之上去学习新的开源项目,需要对新概念或新技术有个大致的了解,才能更好的理解项目的整体实现思路,做起事情来事半功倍。

    千万不要一上来就看代码,核心概念不清楚,核心原理不懂,核心算法没吃透,看代码很难看懂。

    二、安装部署,运行(很重要!)

    2、1 成功运行并简化环境

    好的开源项目,其文档都比较完备,安装部署文档一般会在README中或者doc目录中,甚至提供rpm安装包和docker镜像

    如果官网提供qq群或微信群,也可以加下,毕竟里面有不少技术资料可供参考。

    将程序运行起来!!!

    将程序运行起来!!!

    将程序运行起来!!!

    重要的事说三遍,程序运行起来有,我们就有了直观感受。

    就我的经验而言,一个项目代码,是否能顺利的搭建调试环境,效率大不一样。

    跑起来之后,要尽量的精简自己的环境,减少调试过程中的干扰信息。

    比如,Nginx使用多进程的方式处理请求,为了调试跟踪Nginx的行为,我经常把worker数量设置为1个,这样调试的时候就知道待跟踪的是哪个进程了。

    比如有些环境是分布式的,那么我们部署个单机版本的用来学习和做实验,也算是化繁为简。

    2、2 成功运行意义何在

    首先,便于从视觉感官上体会项目的功能,对开源项目的功能从宏观上能了解一些。

    其次,下断点-> 调试-> 修改代码 -> 观察现象 ->再调试,查看是否符合修改的预期,一点点理解程序的逻辑

    最后,方便截图,截牛逼的图去吹牛逼,哈哈,2333~

    玩起来,嗨起来,搭建成功后必须装逼起来,哈哈

    三、运行并研究Example例子

    example目录:例子目录,先通过例子上手学会如何使用此开源项目

    安装部署好项目,成功运行并直观体验到项目功能后,从总体转到局部,来好好看下example例子中的代码。

    3、1 最简单的入门例子

    简单的入门例子,代码行数一般在50行左右,摒弃了复杂的处理细节和框架的高级特性,便于读者尽快熟悉项目的主干和核心模块。

    简单例子也可能遇到问题,此时可通过邮件列表、社区、Issue来解决遇到的问题。

    熟悉简单例子的过程中,对于有疑问的地方先记录下问题,后面带着问题去阅读源代码解决心中疑问

    3、2 逐步研究更复杂的例子

    熟悉简单例子后,也可阅读些更复杂的例子,熟悉例子代码的过程,就是熟悉开源项目api接口的过程。

    中间会对照代码来查看api文档,了解接口的参数、返回值以及注意事项。

    进阶:手动修改代码来验证自己心里的想法,看看例子是否能正常运行?如果运行失败报错,则查找其原因,排查问题。

    3、3 手写个人demo

    如果公司使用的开源项目实在没有example例子,可考虑自己根据公司需求编写一个demo例子,编写demo的过程,是检验自己是否对api接口熟悉的过程。

    四、针对部分组件,阅读其测试用例

    如果测试用例写的很仔细,那么很值得好好去研究一下。

    原因在于:测试用例往往是针对某个单一的场景,独自构造出一些数据来对程序的流程进行验证。

    test目录:测试目录,学习下单元测试是如何写的

    通过看单元测试用例,可了解到某个类或某个组件是如何使用的。

    先学会如何使用,然后再去从源代码角度理解实现原理,使用过程中遇到了问题或者疑惑,带着问题去阅读源代码,这个效率杠杠滴。

    五、阅读源代码之前必读

    5、1 看代码之前认真看文档

    一个好的开源项目是有完善的文档的,比如百度开源的RPC框架brpc

    docs目录:

    库的开发入门指南,代码的风格文档,程序的命令操作手册,程序中采用的第三方库

    类图,流程图,活动图,架构图,设计文档

    业务相关基础知识介绍文档

    项目技术细节详细介绍

    阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。

    务必要耐心好好的看,多看多实践多思考,少BB

    六、阅读源代码

    6、1 明确阅读代码的目的

    在开始阅读代码之前,首先要明确自己的阅读目的:

    是需要了解其中一个模块的实现?比如基础模块还是业务模块?基础模块中有内存池、线程池、网络数据收发epoll模型等

    还是需要了解这个框架的大体结构,

    还是需要具体熟悉其中的一个算法的实现,等等。

    心里很清楚自己想要什么,才能更有动力去朝着目标努力奋斗。

    6、2 区分主线和支线剧情

    阅读源代码时,分清主线和支线

    先看主线:

    想了解一个业务逻辑的实现流程,中间调用了第三方库函数、utils函数、定制的数据结构和算法等,其实不需要了解其内部实现;

    只需要了解其对外接口,了解这些接口的入口、出口参数以及作用,把这部分当成一个“黑盒”即可。

    再看支线:

    在对主线有充分了解前提下,可以考虑打开“黑盒”研究下其内部实现,比如看看内存池的实现代码,调度器的代码,dpdk中对于海量数据包是如何处理的等。

    具体做法:

    从main函数进入,使用gdb单步跟踪理清一次完整流程(如程序初始化)的代码调用路径,这可以通过debug来观察运行时的变量和行为。

    6、3 挑选感兴趣的“分支”来阅读

    这里的分支指的是功能或版本:

    从功能上说:

    比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节:

    如它用了什么库,

    采用了什么设计模式,

    为什么这样做等。

    如果可以,debug细节代码。

    从源代码版本上说:

    不一定选择最新版本的开源代码进行阅读,如果感觉有点吃力,可选用同一个开源项目的老版本(如1.0版本),

    此时的项目代码,不管是代码量还是复杂度上都要小很多,看起来要容易的多。

    6、4 理清核心数据结构

    程序设计 = 数据结构 + 算法

    因为结构定义了一个程序的架构,结构定下来了才有具体的实现。好比盖房子,数据结构就是房子的框架结构,如果一间房子很大,而你并不清楚这个房子的结构,会在这里面迷路。

    而对于算法,如果属于暂时不需要深究的细节部分,可以参考前面“区分主线和支线剧情”部分,先了解其入口、出口参数以及作用即可。

    Linus说: “烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”

    因此,在阅读一份代码时,厘清核心的数据结构之间的关系尤其重要。

    6、5 添加日志 and 单步调试(情景分析)

    看文档或看代码的过程中,对一些技术点,是需要验证的。

    所谓的“情景分析”,就是自己构造一些情景,然后通过加断点、调试语句等分析在这些场景下的行为。

    我惯用的做法,是在某个重要的入口函数上面加上断点,然后构造触发场景的调试代码,当代码在断点处停下,通过查看堆栈、变量值等等来观察代码的行为。

    情景分析的好处在于:不会在一个项目中大海捞针似的查找,而是能够把问题缩小到一个范围内展开来理解。

    从而把个人的时间和精力聚焦到一个小的范围内不断的研究,一直研究到自己满意为止。

    修改源码加入日志和打印可以帮助你更好的理解源码。

    gdb单步调试,一步步跟踪,是了解源代码最好的途径,没有之一。

    6、6 画图梳理逻辑

    适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。

    画图虽然很浪费时间,但是对帮助理解架构和流程很有帮助。

    6、7 解决遇到的问题

    相信经过前面三个阶段,你已经是各种玩,各种瞎折腾,心里还是有很多疑问吧?

    这个功能真牛逼,是如何实现的呢?

    我的配置文件为什么没有生效呢?

    程序为什么被我搞挂了呢?

    我添加的打印为什么没有被执行?

    打印的值为什么不符合我的预期?

    好!很好!带着这些你心里的问题,去源代码中找答案吧

    1.先总体后局部,把握好主体逻辑代码,然后再逐层深入下去

    一上来就陷入太多的实现细节是大忌!!!

    熟悉主体逻辑后,你大概能知道你感兴趣的代码处于整个项目中的什么模块,什么文件,什么类中

    是个什么样的处理流程,定位到具体代码,一行行的分析它,这个过程会持续一段时间。

    2.带着问题去看代码

    一个系统实现了什么功能,为什么要实现这些功能,是基于什么业务场景?

    3.思考自己如何实现类似系统(功能)

    如果要我来实现一套类似的系统,我会如何来考虑问题,如何来实现这套系统?

    然后再看看别人是如何实现的,找到两者之间的差距,并不断缩小之间的差距。

    七、写笔记记录想法,促进思考和总结

    1.记录解开问题谜团的过程

    2.记录下开源代码中好的设计思想,好的代码技巧,以及任何你觉得好的东西

    3.画整个程序的流程图,有利于理解程序的整个流程,而不被代码的细节所干扰。

    4.坚持记录源代码学习笔记,记笔记能够有助于更深入的思考,以前很多问题只是浅层思考,不够深入

    八、抄写项目源代码

    以groupcache来举例,它包括lru,singleflight,protobuf,一致性hash这四个技术

    步骤一:抄写前,可以大致了解下这些技术,比如lru是什么?lru解决什么问题?简单了解下lru的实现原理(后续深入具体实现)

    步骤二:抄写过程中,会发现和之前了解的实现原理有不同的地方,比如有优化,或者有疑惑点,记录下来,继续抄写。

    步骤三:抄写后,针对有疑惑的点,找资料,找人交流,必须搞清楚前面记录的不动的地方。

    九、仿写项目

    如果感觉自己对于项目理解的还不到位,我推荐一个笨方法,抄项目代码,抄着抄着你就懂了。

    如果想进一步深刻的学习到源代码的精髓,可以仿写一个相近的程序进行操练。

    理解了这个程序并不表明掌握了这个程序,只有在操练一个相近的程序时,才知道你到底理解了多少,掌握了多少

    最近一直在仿写,或者说叫抄写开源项目,所以有点心得,整理一下:

    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    自己写的东西,必须要合理的制作文档

    仿写开源项目,按照如下思路来:

    首先,熟悉开源项目,并熟练使用

    其次,阅读开源项目源代码,梳理其流程和核心数据结构

    再次,取主干,抛细节

    以开源项目用一棵大树比喻,核心思想是剥离出开源项目的主干,去除掉繁杂的枝叶,以求能否更好的理解其设计理念和编码技巧。

    最后,开始仿写开源项目代码。

    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    十、教给他人(输出知识)

    检验是否掌握一门技术,就是将知识输出,看他人能否听懂

    当自己对项目的方方面面都很熟悉后,可以在B站上开直播,将自己所学的知识传授给他人。

    输出形式:

    1、csdn博客、知乎、头条、微信公众号等平台发文章

    2、组内技术讨论或者微信群讨论

    3、公司内技术分享会(正式)

    3、在B站上直播
     

    //以下是2021年更新的

    更新日志:

    2020-12-25 添加ch兄的学习方法论截图

    2021-01-27 添加杨波老师的开源项目学习经验

    阅读开源代码,一上来就陷入技术细节是大忌!!!

    上图是ch总结的学习方法论,

    核心概念:

    总体架构

    核心概念和术语

    逻辑关系如何

    从使用者的角度来看:

    1、提供什么功能?

    2、解决什么问题?

    3、使用场景和限制是什么

    4、如何来使用

    横向对比:

    功能上相似之处和差异

    技术实现原理上相似之处和差异

    从设计者角度:

    1、为什么这么设计?

    2、背后的思想和理论

    3、如果我来设计,会从哪些方面来考虑?

    参考链接:

    优秀架构师是如何学习开源项目的?_架构师波波的博客-CSDN博客

    如何阅读一份源代码?(2020年版) - codedump的网络日志

    展开全文
  • FOSSID(开源代码检测工具)

    千次阅读 2022-02-09 09:38:51
    在Github、Gitkraken等全球知名开源社区的开源代码检测工具排行榜均位列第一。而在中国的开源社区及开源治理白皮书中多次被提名。 作为开源治理的标杆,中国赛迪检测认证中心、中国赛宝实验室,中国电子技术标准化...

    FOSSID简介:

            FOSSID总部位于瑞典首都斯德哥尔摩。由一群开源技术专家组成的研发团队,该团队拥有18年的开源研发、管理、测试经验。
            在Github、Gitkraken等全球知名开源社区的开源代码检测工具排行榜均位列第一。而在中国的开源社区及开源治理白皮书中多次被提名。
            作为开源治理的标杆,中国赛迪检测认证中心、中国赛宝实验室,中国电子技术标准化研究院塞西实验室,中国信息通信研究院,中国信息安全测评中心率先成为了该产品使用单位,其开具的检测报告就是由该产品进行检测做为依据的。
    开源相关监管要求:
            

     

    开源软件的价值及应用:

    1.降低成本

    2.提高效率

    3.提升创新力

    开源带来的风险有哪些?

    合规性风险

    1.开源许可违规(法律诉讼、产品召回等)

    2.自有代码相关知识产权泄露(被迫开源)

    安全漏洞风险

    1.引入开源软件同时,被动引入安全漏洞。

    无法满足海内/外监管部门要求

    1.软件外包合作,甲方的监管和免责要求。

    2.国家相关机构,对自主知识产权和自主可控的监管要求。

    开源许可证的分类及治理方法

    开源许可证大致分为两类

    1.开放型许可证(MIT、BSD、Apache等)

    2.传染型许可证(MPL、LGPL、GPL、AGPL等)

    用户代码中发现传染型许可证的治理方法

    1.冗余删除

    2.溯源替代

    3.隔离开源

    4.逻辑模仿

    FOSSID能为您做什么?

    开源软件合规性检测

       1.支持所有语言。

       2.能够精确到片段及片段式快速扫描。

       3.支持盲审功能。

       4.强大的开源知识库,目前超过3500万个开源项目,并且开源知识库定期更新。

    安全漏洞扫描

       1.扫描开源代码的同时,也同步扫描开源软件的安全漏洞。

       2.支持超过16万种安全漏洞,与NVD同步。

    FOSSID的应用场景

    企业内部的代码检测需求

       1.项目开源之前,查找自有代码的开源风险。

       2.针对闭源商业代码,也需要规避合规性风险。

    政府部门监管政策对开源治理的要求

       1.国家项目对自主知识产权的要求。

       2.国家对某些重要领域的风险防控要求。

    国际合作中甲方提出的代码扫描需求:代码打包出口到海外,甲方要求出具检测报告免责。

    司法鉴定过程中的代码检测需求:软件知识产权纠纷案件中,代码检测是重要的参考依据。

    企业兼并过程中的代码审计需求:邀请第三方审计,对收购标的进行软件资产评估。

    FOSSID的工作原理:

    FOSSID部署方式:

    分布式部署

       1.将知识库(KB)部署在私有云

       2.WebApp可以在多地部署,提升扫描效率

       3.开源代码扫描分布式管理

       4.对网络质量要求高

     

    本地部署

       1.将知识库(KB)和WebApp都在本地网部署

       2.可以组成便携式系统(KB+WebApp)

       3.硬件部署成本较低

       4.安全性提高

    FOSSID的优势

    技术优势

       1.算法优势-比传统扫描分析快一个数量级。

       2.数据优势-拥有目前世界上最大的开源知识库及安全漏洞库。

       3.部署优势-支持云部署和本地离线式部署。

       4.后发优势-吸取传统优点,改进缺陷,稳定可靠。

    客户反馈

       1.在全球开源治理领域,客户群体的庞大是对产品最高的认可。

       2.中国知名通信厂商和测评机构高度评价FOSSID。

    技术支持

       1.本地技术支持团队,10年以上开源检测经验。

    有兴趣关注~

    Contact us:

    Sale:李先生

    Mobile/Wechat:13552863111

    展开全文
  • 开源代码网站

    万次阅读 2018-01-17 09:29:04
    !!!github!!!codepen!!!码云 ...(1)到sourceforge上查找相关代码;...(4)直接到开源项目网站上面寻找代码; (5)到csdn等网站下载代码,偶尔会有意外的收获; (6)到图书出版社下载图书附录的代码

    !!!github!!!codepen!!!码云



    (1)到sourceforge上查找相关代码;

    (2)到google code上面查找具体的代码;

    (3)到apache网站上寻找java的相关代码;

    (4)直接到开源项目网站上面寻找代码;

    (5)到csdn等网站下载代码,偶尔会有意外的收获;

    (6)到图书出版社下载图书附录的代码;

    (7)直接和软件作者联系,看看能不能获取相关的开源代码。


    (8)到阿里云taocode去找,http://code.taobao.org/project/explore/

    http://code.taobao.org/project/lang/list/C/1/


    (9)已有的c/c++框架及开源代码:http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.aspx

    值得推荐的C/C++框架和库


    (10)C开源项目http://www.oschina.net/project/tag/35?lang=21&os=0&sort=time

    下次造轮子前先看看现有的轮子吧

    值得学习的C语言开源项目

    - 1. Webbench 

    Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。

    下载链接:http://home.tiscali.cz/~cz210552/webbench.html

    - 2. Tinyhttpd

    tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。

    下载链接:http://sourceforge.net/projects/tinyhttpd/

    - 3. cJSON

    cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。

    cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。

    项目主页:http://sourceforge.net/projects/cjson/

    - 4. CMockery

    cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。

    主要特点:

    • 免费且开源,google提供技术支持;
    • 轻量级的框架,使测试更加快速简单;
    • 避免使用复杂的编译器特性,对老版本的编译器来讲,兼容性好;
    • 并不强制要求待测代码必须依赖C99标准,这一特性对许多嵌入式系统的开发很有用

    下载链接:http://code.google.com/p/cmockery/downloads/list

    - 5. Libev

    libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。

    下载链接:http://software.schmorp.de/pkg/libev.html

    - 6. Memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。

    下载地址:http://memcached.org/

    - 7. Lua

    Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。

    让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。

    下载地址:http://www.lua.org/

    - 8. SQLite

    SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。

    下载地址:http://www.sqlite.org/ 。

    - 9. UNIX v6

    UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?

    另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。

    下载地址:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6

    - 10. NETBSD

    NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。

    下载地址:http://www.netbsd.org/

    C++ 资源大全

    关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。

     

    标准库

    C++标准库,包括了STL容器,算法和函数等。

     

    框架

    C++通用框架和库

    • Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合
    • ASL :Adobe源代码库提供了同行的评审和可移植的C++源代码库。
    • Boost :大量通用C++库的集合。
    • BDE :来自于彭博资讯实验室的开发环境。
    • Cinder:提供专业品质创造性编码的开源开发社区。
    • Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。
    • Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。
    • EASTL :EA-STL公共部分
    • ffead-cpp :企业应用程序开发框架
    • Folly:由Facebook开发和使用的开源C++库
    • JUCE :包罗万象的C++类库,用于开发跨平台软件
    • libPhenom:用于构建高性能和高度可扩展性系统的事件框架。
    • LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO
    • LibU : C语言写的多平台工具库
    • Loki :C++库的设计,包括常见的设计模式和习语的实现。
    • MiLi :只含头文件的小型C++库
    • openFrameworks :开发C++工具包,用于创意性编码。
    • Qt :跨平台的应用程序和用户界面框架
    • Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。
    • ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。
    • STLport:是STL具有代表性的版本
    • STXXL:用于额外的大型数据集的标准模板库。
    • Ultimate++ :C++跨平台快速应用程序开发框架
    • Windows Template Library:用于开发Windows应用程序和UI组件的C++库
    • Yomm11 :C++11的开放multi-methods.

     

    人工智能

    • btsk :游戏行为树启动器工具
    • Evolving Objects:基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。
    • Neu:C++11框架,编程语言集,用于创建人工智能应用程序的多用途软件系统。

     

    异步事件循环

    • Boost.Asio:用于网络和底层I/O编程的跨平台的C++库。
    • libev :功能齐全,高性能的时间循环,轻微地仿效libevent,但是不再像libevent一样有局限性,也修复了它的一些bug。
    • libevent :事件通知库
    • libuv :跨平台异步I/O。

     

    音频

    音频,声音,音乐,数字化音乐库

    • FMOD :易于使用的跨平台的音频引擎和音频内容的游戏创作工具。
    • Maximilian :C++音频和音乐数字信号处理库
    • OpenAL :开源音频库—跨平台的音频API
    • Opus:一个完全开放的,免版税的,高度通用的音频编解码器
    • Speex:免费编解码器,为Opus所废弃
    • Tonic: C++易用和高效的音频合成
    • Vorbis: Ogg Vorbis是一种完全开放的,非专有的,免版税的通用压缩音频格式。

     

    生态学

    生物信息,基因组学和生物技术

    • libsequence:用于表示和分析群体遗传学数据的C++库。
    • SeqAn:专注于生物数据序列分析的算法和数据结构。
    • Vcflib :用于解析和处理VCF文件的C++库
    • Wham:直接把联想测试应用到BAM文件的基因结构变异。

     

    压缩

    压缩和归档库

    • bzip2:一个完全免费,免费专利和高质量的数据压缩
    • doboz:能够快速解压缩的压缩库
    • PhysicsFS:对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。
    • KArchive:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。
    • LZ4 :非常快速的压缩算法
    • LZHAM :无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。
    • LZMA :7z格式默认和通用的压缩方法。
    • LZMAT :及其快速的实时无损数据压缩库
    • miniz:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。
    • Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。
    • Snappy :快速压缩和解压缩
    • ZLib :非常紧凑的数据流压缩库
    • ZZIPlib:提供ZIP归档的读权限。

     

    并发性

    并发执行和多线程

    • Boost.Compute :用于OpenCL的C++GPU计算库
    • Bolt :针对GPU进行优化的C++模板库
    • C++React :用于C++11的反应性编程库
    • Intel TBB :Intel线程构件块
    • Libclsph:基于OpenCL的GPU加速SPH流体仿真库
    • OpenCL :并行编程的异构系统的开放标准
    • OpenMP:OpenMP API
    • Thrust :类似于C++标准模板库的并行算法库
    • HPX :用于任何规模的并行和分布式应用程序的通用C++运行时系统
    • VexCL :用于OpenCL/CUDA 的C++向量表达式模板库。

     

    容器

    • C++ B-tree :基于B树数据结构,实现命令内存容器的模板库
    • Hashmaps: C++中开放寻址哈希表算法的实现

     

    密码学

    • Bcrypt :一个跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系统和处理器中。
    • BeeCrypt
    • Botan: C++加密库
    • Crypto++:一个有关加密方案的免费的C++库
    • GnuPG: OpenPGP标准的完整实现
    • GnuTLS :实现了SSL,TLS和DTLS协议的安全通信库
    • Libgcrypt
    • libmcrypt
    • LibreSSL:免费的SSL/TLS协议,属于2014 OpenSSL的一个分支
    • LibTomCrypt:一个非常全面的,模块化的,可移植的加密工具
    • libsodium:基于NaCI的加密库,固执己见,容易使用
    • Nettle 底层的加密库
    • OpenSSL : 一个强大的,商用的,功能齐全的,开放源代码的加密库。
    • Tiny AES128 in C :用C实现的一个小巧,可移植的实现了AES128ESB的加密算法

     

    数据库

    数据库,SQL服务器,ODBC驱动程序和工具

    • hiberlite :用于Sqlite3的C++对象关系映射
    • Hiredis: 用于Redis数据库的很简单的C客户端库
    • LevelDB: 快速键值存储库
    • LMDB:符合数据库四大基本元素的嵌入键值存储
    • MySQL++:封装了MySql的C API的C++ 包装器
    • RocksDB:来自Facebook的嵌入键值的快速存储
    • SQLite:一个完全嵌入式的,功能齐全的关系数据库,只有几百KB,可以正确包含到你的项目中。

     

    调试

    调试库, 内存和资源泄露检测,单元测试

    • Boost.Test:Boost测试库
    • Catch:一个很时尚的,C++原生的框架,只包含头文件,用于单元测试,测试驱动开发和行为驱动开发。
    • CppUnit:由JUnit移植过来的C++测试框架
    • CTest:CMake测试驱动程序
    • googletest:谷歌C++测试框架
    • ig-debugheap:用于跟踪内存错误的多平台调试堆
    • libtap:用C语言编写测试
    • MemTrack —用于C++跟踪内存分配
    • microprofile- 跨平台的网络试图分析器
    • minUnit :使用C写的迷你单元测试框架,只使用了两个宏
    • Remotery:用于web视图的单一C文件分析器
    • UnitTest++:轻量级的C++单元测试框架

     

    游戏引擎

    • Cocos2d-x :一个跨平台框架,用于构建2D游戏,互动图书,演示和其他图形应用程序。
    • Grit :社区项目,用于构建一个免费的游戏引擎,实现开放的世界3D游戏。
    • Irrlicht :C++语言编写的开源高性能的实时#D引擎
    • Polycode:C++实现的用于创建游戏的开源框架(与Lua绑定)。

     

    图形用户界面

    • CEGUI : 很灵活的跨平台GUI库
    • FLTK :快速,轻量级的跨平台的C++GUI工具包。
    • GTK+: 用于创建图形用户界面的跨平台工具包
    • gtkmm :用于受欢迎的GUI库GTK+的官方C++接口。
    • imgui:拥有最小依赖关系的立即模式图形用户界面
    • libRocket :libRocket 是一个C++ HTML/CSS 游戏接口中间件
    • MyGUI :快速,灵活,简单的GUI
    • Ncurses:终端用户界面
    • QCustomPlot :没有更多依赖关系的Qt绘图控件
    • Qwt :用户与技术应用的Qt 控件
    • QwtPlot3D :功能丰富的基于Qt/OpenGL的C++编程库,本质上提供了一群3D控件
    • OtterUI :OtterUI 是用于嵌入式系统和互动娱乐软件的用户界面开发解决方案
    • PDCurses 包含源代码和预编译库的公共图形函数库
    • wxWidgets C++库,允许开发人员使用一个代码库可以为widows, Mac OS X,Linux和其他平台创建应用程序

     

    图形

    • bgfx:跨平台的渲染库
    • Cairo:支持多种输出设备的2D图形库
    • Horde3D 一个小型的3D渲染和动画引擎
    • magnum C++11和OpenGL 2D/3D 图形引擎
    • Ogre 3D 用C++编写的一个面向场景,实时,灵活的3D渲染引擎(并非游戏引擎)
    • OpenSceneGraph 具有高性能的开源3D图形工具包
    • Panda3D 用于3D渲染和游戏开发的框架,用Python和C++编写。
    • Skia 用于绘制文字,图形和图像的完整的2D图形库
    • urho3d 跨平台的渲染和游戏引擎。

     

    图像处理

    • Boost.GIL:通用图像库
    • CImg :用于图像处理的小型开源C++工具包
    • CxImage :用于加载,保存,显示和转换的图像处理和转换库,可以处理的图片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
    • FreeImage :开源库,支持现在多媒体应用所需的通用图片格式和其他格式。
    • GDCM:Grassroots DICOM 库
    • ITK:跨平台的开源图像分析系统
    • Magick++:ImageMagick程序的C++接口
    • MagickWnd:ImageMagick程序的C++接口
    • OpenCV : 开源计算机视觉类库
    • tesseract-ocr:OCR引擎
    • VIGRA :用于图像分析通用C++计算机视觉库
    • VTK :用于3D计算机图形学,图像处理和可视化的开源免费软件系统。

     

    国际化

    • gettext :GNU `gettext’
    • IBM ICU:提供Unicode 和全球化支持的C、C++ 和Java库
    • libiconv :用于不同字符编码之间的编码转换库

     

    Jason

    • frozen : C/C++的Jason解析生成器
    • Jansson :进行编解码和处理Jason数据的C语言库
    • jbson :C++14中构建和迭代BSON data,和Json 文档的库
    • JeayeSON:非常健全的C++ JSON库,只包含头文件
    • JSON++ : C++ JSON 解析器
    • json-parser:用可移植的ANSI C编写的JSON解析器,占用内存非常少
    • json11 :一个迷你的C++11 JSON库
    • jute :非常简单的C++ JSON解析器
    • ibjson:C语言中的JSON解析和打印库,很容易和任何模型集成。
    • libjson:轻量级的JSON库
    • PicoJSON:C++中JSON解析序列化,只包含头文件
    • qt-json :用于JSON数据和 QVariant层次间的相互解析的简单类
    • QJson:将JSON数据映射到QVariant对象的基于Qt的库
    • RapidJSON: 用于C++的快速JSON 解析生成器,包含SAX和DOM两种风格的API
    • YAJL :C语言中快速流JSON解析库

     

    日志

    • Boost.Log :设计非常模块化,并且具有扩展性
    • easyloggingpp:C++日志库,只包含单一的头文件。
    • Log4cpp :一系列C++类库,灵活添加日志到文件,系统日志,IDSA和其他地方。
    • templog:轻量级C++库,可以添加日志到你的C++应用程序中

     

    机器学习

    • Caffe :快速的神经网络框架
    • CCV :以C语言为核心的现代计算机视觉库
    • mlpack :可扩展的C++机器学习库
    • OpenCV:开源计算机视觉库
    • Recommender:使用协同过滤进行产品推荐/建议的C语言库。
    • SHOGUN:Shogun 机器学习工具
    • sofia-ml :用于机器学习的快速增量算法套件

     

    数学

    • Armadillo :高质量的C++线性代数库,速度和易用性做到了很好的平衡。语法和MatlAB很相似
    • blaze:高性能的C++数学库,用于密集和稀疏算法。
    • ceres-solver :来自谷歌的C++库,用于建模和解决大型复杂非线性最小平方问题。
    • CGal: 高效,可靠的集合算法集合
    • cml :用于游戏和图形的免费C++数学库
    • Eigen :高级C++模板头文件库,包括线性代数,矩阵,向量操作,数值解决和其他相关的算法。
    • GMTL:数学图形模板库是一组广泛实现基本图形的工具。
    • GMP:用于个高精度计算的C/C++库,处理有符号整数,有理数和浮点数。

     

    多媒体

    • GStreamer :构建媒体处理组件图形的库
    • LIVE555 Streaming Media :使用开放标准协议(RTP/RTCP, RTSP, SIP) 的多媒体流库
    • libVLC :libVLC (VLC SDK)媒体框架
    • QtAv:基于Qt和FFmpeg的多媒体播放框架,能够帮助你轻而易举地编写出一个播放器
    • SDL :简单直控媒体层
    • SFML :快速,简单的多媒体库

     

    网络

    • ACE:C++面向对象网络变成工具包
    • Boost.Asio:用于网络和底层I/O编程的跨平台的C++库
    • Casablanca:C++ REST SDK
    • cpp-netlib:高级网络编程的开源库集合
    • Dyad.c:C语言的异步网络
    • libcurl :多协议文件传输库
    • Mongoose非常轻量级的网络服务器
    • Muduo :用于Linux多线程服务器的C++非阻塞网络库
    • net_skeleton :C/C++的TCP 客户端/服务器库
    • nope.c :基于C语言的超轻型软件平台,用于可扩展的服务器端和网络应用。 对于C编程人员,可以考虑node.js
    • Onion :C语言HTTP服务器库,其设计为轻量级,易使用。
    • POCO:用于构建网络和基于互联网应用程序的C++类库,可以运行在桌面,服务器,移动和嵌入式系统。
    • RakNet:为游戏开发人员提供的跨平台的开源C++网络引擎。
    • Tuf o :用于Qt之上的C++构建的异步Web框架。
    • WebSocket++ :基于C++/Boost Aiso的websocket 客户端/服务器库
    • ZeroMQ :高速,模块化的异步通信库

     

    物理学

    动力学仿真引擎

    • Box2D:2D的游戏物理引擎。
    • Bullet :3D的游戏物理引擎。
    • Chipmunk :快速,轻量级的2D游戏物理库
    • LiquidFun:2D的游戏物理引擎
    • ODE :开放动力学引擎-开源,高性能库,模拟刚体动力学。
    • ofxBox2d:Box2D开源框架包装器。
    • Simbody :高性能C++多体动力学/物理库,模拟关节生物力学和机械系统,像车辆,机器人和人体骨骼。

     

    机器人学

    • MOOS-IvP :一组开源C++模块,提供机器人平台的自主权,尤其是自主的海洋车辆。
    • MRPT:移动机器人编程工具包
    • PCL :点云库是一个独立的,大规模的开放项目,用于2D/3D图像和点云处理。
    • Robotics Library (RL): 一个独立的C++库,包括机器人动力学,运动规划和控制。
    • RobWork:一组C++库的集合,用于机器人系统的仿真和控制。
    • ROS :机器人操作系统,提供了一些库和工具帮助软件开发人员创建机器人应用程序。

     

    科学计算

    • FFTW :用一维或者多维计算DFT的C语言库。
    • GSL:GNU科学库。

     

    脚本

    • ChaiScript :用于C++的易于使用的嵌入式脚本语言。
    • Lua :用于配置文件和基本应用程序脚本的小型快速脚本引擎。
    • luacxx:用于创建Lua绑定的C++ 11 API
    • SWIG :一个可以让你的C++代码链接到JavaScript,Perl,PHP,Python,Tcl和Ruby的包装器/接口生成器
    • V7:嵌入式的JavaScript 引擎。
    • V8 :谷歌的快速JavaScript引擎,可以被嵌入到任何C++应用程序中。

     

    序列化

    • Cap’n Proto :快速数据交换格式和RPC系统。
    • cereal :C++11 序列化库
    • FlatBuffers :内存高效的序列化库
    • MessagePack :C/C++的高效二进制序列化库,例如 JSON
    • protobuf :协议缓冲,谷歌的数据交换格式。
    • protobuf-c :C语言的协议缓冲实现
    • SimpleBinaryEncoding:用于低延迟应用程序的对二进制格式的应用程序信息的编码和解码。
    • Thrift :高效的跨语言IPC/RPC,用于C++,Java,Python,PHP,C#和其它多种语言中,最初由Twitter开发。注:原文有误,应该是 facebook 在2007年开发的,现在是 Apache 在维护

     

    视频

    • libvpx :VP8/VP9编码解码SDK
    • FFmpeg :一个完整的,跨平台的解决方案,用于记录,转换视频和音频流。
    • libde265 :开放的h.265视频编解码器的实现。
    • OpenH264:开源H.364 编解码器。
    • Theora :免费开源的视频压缩格式。

     

    虚拟机

    • CarpVM:C中有趣的VM,让我们一起来看看这个。
    • MicroPython :旨在实现单片机上Python3.x的实现
    • TinyVM:用纯粹的ANSI C编写的小型,快速,轻量级的虚拟机。

     

    Web应用框架

    • Civetweb :提供易于使用,强大的,C/C++嵌入式Web服务器,带有可选的CGI,SSL和Lua支持。
    • CppCMS :免费高性能的Web开发框架(不是 CMS).
    • Crow :一个C++微型web框架(灵感来自于Python Flask)
    • Kore :使用C语言开发的用于web应用程序的超快速和灵活的web服务器/框架。
    • libOnion:轻量级的库,帮助你使用C编程语言创建web服务器。
    • QDjango:使用C++编写的,基于Qt库的web框架,试图效仿Django API,因此得此名。
    • Wt :开发Web应用的C++库。

     

    XML

    XML就是个垃圾,xml的解析很烦人,对于计算机它也是个灾难。这种糟糕的东西完全没有存在的理由了。-Linus Torvalds

    • Expat :用C语言编写的xml解析库
    • Libxml2 :Gnome的xml C解析器和工具包
    • libxml++ :C++的xml解析器
    • PugiXML :用于C++的,支持XPath的轻量级,简单快速的XML解析器。
    • RapidXml :试图创建最快速的XML解析器,同时保持易用性,可移植性和合理的W3C兼容性。
    • TinyXML :简单小型的C++XML解析器,可以很容易地集成到其它项目中。
    • TinyXML2:简单快速的C++CML解析器,可以很容易集成到其它项目中。
    • TinyXML++:TinyXML的一个全新的接口,使用了C++的许多许多优势,模板,异常和更好的异常处理。
    • Xerces-C++ :用可移植的C++的子集编写的XML验证解析器。

     

    多项混杂

    一些有用的库或者工具,但是不适合上面的分类,或者还没有分类。

    • C++ Format :C++的小型,安全和快速格式化库
    • casacore :从aips++ 派生的一系列C++核心库
    • cxx-prettyprint:用于C++容器的打印库
    • DynaPDF :易于使用的PDF生成库
    • gcc-poison :帮助开发人员禁止应用程序中的不安全的C/C++函数的简单的头文件。
    • googlemock:编写和使用C++模拟类的库
    • HTTP Parser :C的http请求/响应解析器
    • libcpuid :用于x86 CPU检测盒特征提取的小型C库
    • libevil :许可证管理器
    • libusb:允许移动访问USB设备的通用USB库
    • PCRE:正则表达式C库,灵感来自于Perl中正则表达式的功能。
    • Remote Call Framework :C++的进程间通信框架。
    • Scintilla :开源的代码编辑控件
    • Serial Communication Library :C++语言编写的跨平台,串口库。
    • SDS:C的简单动态字符串库
    • SLDR :超轻的DNS解析器
    • SLRE: 超轻的正则表达式库
    • Stage :移动机器人模拟器
    • VarTypes:C++/Qt4功能丰富,面向对象的管理变量的框架。
    • ZBar:‘条形码扫描器’库,可以扫描照片,图片和视频流中的条形码,并返回结果。
    • CppVerbalExpressions :易于使用的C++正则表达式
    • QtVerbalExpressions:基于C++ VerbalExpressions 库的Qt库
    • PHP-CPP:使用C++来构建PHP扩展的库
    • Better String :C的另一个字符串库,功能更丰富,但是没有缓冲溢出问题,还包含了一个C++包装器。

     

    软件

    用于创建开发环境的软件

    编译器

    C/C++编译器列表

    • Clang :由苹果公司开发的
    • GCC:GNU编译器集合
    • Intel C++ Compiler :由英特尔公司开发
    • LLVM :模块化和可重用编译器和工具链技术的集合
    • Microsoft Visual C++ :MSVC,由微软公司开发
    • Open WatCom :Watcom,C,C++和Fortran交叉编译器和工具
    • TCC :轻量级的C语言编译器

     

    在线编译器

    在线C/C++编译器列表

    • codepad :在线编译器/解释器,一个简单的协作工具
    • CodeTwist:一个简单的在线编译器/解释器,你可以粘贴的C,C++或者Java代码,在线执行并查看结果
    • coliru :在线编译器/shell, 支持各种C++编译器
    • Compiler Explorer:交互式编译器,可以进行汇编输出
    • CompileOnline:Linux上在线编译和执行C++程序
    • Ideone :一个在线编译器和调试工具,允许你在线编译源代码并执行,支持60多种编程语言。

     

    调试器

    C/C++调试器列表

     

    集成开发环境(IDE)

    C/C++集成开发环境列表

    • AppCode :构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C,C,C++,Java和Java开发的集成开发环境
    • CLion:来自JetBrains的跨平台的C/C++的集成开发环境
    • Code::Blocks :免费C,C++和Fortran的集成开发环境
    • CodeLite :另一个跨平台的免费的C/C++集成开发环境
    • Dev-C++:可移植的C/C++/C++11集成开发环境
    • Eclipse CDT:基于Eclipse平台的功能齐全的C和C++集成开发环境
    • Geany :轻量级的快速,跨平台的集成开发环境。
    • IBM VisualAge :来自IBM的家庭计算机集成开发环境。
    • Irony-mode:由libclang驱动的用于Emacs的C/C++微模式
    • KDevelop:免费开源集成开发环境
    • Microsoft Visual Studio :来自微软的集成开发环境
    • NetBeans :主要用于Java开发的的集成开发环境,也支持其他语言,尤其是PHP,C/C++和HTML5。
    • Qt Creator:跨平台的C++,Javascript和QML集成开发环境,也是Qt SDK的一部分。
    • rtags:C/C++的客户端服务器索引,用于 跟基于clang的emacs的集成
    • Xcode :由苹果公司开发
    • YouCompleteMe:一个用于Vim的根据你敲的代码快速模糊搜索并进行代码补全的引擎。

     

    构建系统

    • Bear :用于为clang工具生成编译数据库的工具
    • Biicode:基于文件的简单依赖管理器。
    • CMake :跨平台的免费开源软件用于管理软件使用独立编译的方法进行构建的过程。
    • CPM:基于CMake和Git的C++包管理器
    • FASTBuild:高性能,开源的构建系统,支持高度可扩展性的编译,缓冲和网络分布。
    • Ninja :专注于速度的小型构建系统
    • Scons :使用Python scipt 配置的软件构建工具
    • tundra :高性能的代码构建系统,甚至对于非常大型的软件项目,也能提供最好的增量构建次数。
    • tup:基于文件的构建系统,用于后台监控变化的文件。

     

    静态代码分析

    提高质量,减少瑕疵的代码分析工具列表

    感谢平凡之路和fffaraz 的整理,转载请注明出处。

    转自http://blog.csdn.net/benpaobagzb/article/details/50768512


    开源项目
    展开全文
  • @[TOC]开源盛世:谈谈开源代码的使用与安全风险 本文最早于2020年5月18日发表于鉴释公众号。原文标题为:抓住“开源盛世“,这个工具你必须了解一下。 开源的现状与潜在使用风险 近些年来,开源技术的发展如火如荼,...
  • CODE CHINA 开源代码托管平台可以让你轻松地将代码仓库托管到云端Git服务器。她基于最新版本的GitLab,具备完善的权限管理、组织管理、分支管理、强大的 Merge Request 以及精巧实用的 WebIDE 功能;支持CI、CD;
  • 开源代码审查工具Sonarqube简单使用

    千次阅读 2022-04-13 13:49:23
    代码审查 2.1 新建项目 2.2 关联代码 3. 其他 1. 下载&安装 SonarQube提供了多个版本, 其下载页面提供了各个版本的功能对比,最新特性和功能请以官网为准。此处下载社区版进行代码检查和分析 ,更详细的教程请...
  • 22个值得收藏的Android开源代码

    千次阅读 2020-08-26 15:50:42
    本文介绍了android开发中比较热门的开源代码,这些代码绝大多数可以直接应用到项目中。 原文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1020/1808.html 1.FileBrowserView 一个强大的文件...
  • WPF优秀开源代码合集

    千次下载 热门讨论 2013-01-27 23:14:16
    WPF优秀开源代码合集
  • audacity开源代码

    热门讨论 2014-05-14 11:07:12
    一款开源的音频处理软件,包含几乎所有的音频的处理算法
  • OCR开源代码库介绍

    千次阅读 2021-05-18 10:34:09
    OCR开源代码库介绍简介tesseract-ocrchineseocr_liteEasyOCRPaddleOCRMMOCRSTR 简介 文字的发明是人类文明史上的重要进步,它改变了人类知识的存储方式和传播方式。文字于日常生活中无处不在,比如马路上的标志牌,...
  • Github上如何找开源代码

    千次阅读 2020-10-04 10:16:25
    本文介绍的是在GitHub上如何找自己感兴趣的项目 ... 下面是视频下面其他同学整理出来的一些知识点,可以根据自己的需要选择限制哪些条件 in:name example 名字中有“example” in:readme example readme中有...
  • 使用码云(Gitee)进行开源代码管理

    千次阅读 2021-12-05 12:43:40
    使用码云(Gitee)进行开源代码管理
  • 开源代码库整理

    千次阅读 2019-03-12 13:50:49
    开源代码库整理 可以把下面的文本,保存成shell脚本,运行下载。 #!/bin/bash c\c++ 代码库 mkdir cpp cd cpp echo c c++ 代码库 pwd ini配置文件解析 git clone ...
  • 波士顿动力开源代码by Hemakshi Sachdev 通过Hemakshi Sachdev 失去动力两年后,我如何开始开源之旅 (How I started my open source journey after being demotivated for two years) Contributing to open source...
  • 微信小程序经典开源代码汇总

    千次阅读 2020-09-08 16:02:51
    https://www.jianshu.com/p/0ff8c3b2f59f,开始写代码了,对于一个对小程序了解程度半生不熟的人来说无从下手,看视频吧又太浪费时间了,那么只要有一定的前端基础,再结合一些别人的开源代码,很快就能开发出自己的...
  • Mit Mini Cheetah开源代码开发环境搭建

    千次阅读 多人点赞 2020-09-12 11:05:25
    MIT Mini Cheetah–开源代码仿真环境搭建 摘要 2019年以来,关于四足机器人的报道越来越多,我比较关注的是MIT mini cheetah。Mini Cheetah的外表是很可爱的,它长约0.4米,重约20磅,外形比较接近人们养的小狗,让...
  • 三维重建开源代码汇总【保持更新】

    千次阅读 多人点赞 2021-05-22 22:43:29
    三维重建开源代码汇总,不定期更新。SFM、MVS、SLAM、Mesh
  • 引用开源代码问题

    千次阅读 2019-12-16 12:10:40
    GPL协议的主要内容是只要在一个软件中使用(“使用"指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的"传染性”。 LGPL允许商业软件通过...
  • 区块链开源代码什么意思 在从事开源工作的10多年中,我参与了一些具有创新思想的小型项目,这些创意后来发展成为具有牢固社区的大型项目。 我还见证了功能失调的社区如何从项目中汲取能量。 我最近还通过编写项目...
  • 查找论文对应开源代码的神器 Papers with Code
  • 开源代码社区网站

    千次阅读 2020-04-27 19:47:12
    GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 Papers With Code Papers with Code 是一个总结了机器学习论文及其代码实现的网站。大多数论文都是有...
  • (快速下载)百度 apollo 开源代码

    千次阅读 2019-09-29 16:41:59
    一开始下载百度apollo代码是在githug上的,发现老是下载得很慢,有时候会下载失败; 这里提供中国码云得下载仓库: 中国码云---apollo代码下载 说明:这里是从百度apollo--githug官方移植过来的,代码是一样的 ...
  • 本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及...
  • 开源代码该如何调试

    千次阅读 2019-05-15 09:08:40
    每次去github找开源代码,看到都是master版本,下载下来调试,总是编译有问题,这边却个jar包,那边少个类什么的。我不知道其他人编译怎样,但我遇到的是这个样子,一直也没有太好的解决办法。很多github, master...
  • 开源代码网站集合

    千次阅读 2019-03-26 17:35:19
    USB_ModeSwitch:http://www.draisberghof.de/usb_modeswitch/ LWIP:https://savannah.nongnu.org/projects/lwip/ cJSON:https://github.com/DaveGamble/cJSON
  • 查找论文及其开源代码

    千次阅读 2020-08-16 16:11:50
    哇塞发现了一个宝藏网站,可以用来查找各大论文及其开源代码 网址:https://paperswithcode.com/ 打开之后界面是这样的,输入论文关键词搜索即可。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,282,053
精华内容 512,821
关键字:

开源代码