FFmpeg

遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。

如果这是您的项目,请在您的项目页面上显示您的徽章状态!徽章状态如下所示: 项目235的徽章级别为in_progress 这里是如何嵌入它:

这些是通过级别条款。您还可以查看白银黄金级别条款。

        

 基本 13/13

  • 识别

    FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure [FATE](fate.ffmpeg.org) across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.

    It contains libavcodec, libavutil, libavformat, libavfilter, libavdevice, libswscale and libswresample which can be used by applications. As well as ffmpeg, ffserver, ffplay and ffprobe which can be used by end users for transcoding, streaming and playing.

    用什么编程语言实现项目?
  • 基本项目网站内容


    项目网站必须简明扼要地描述软件的作用(它解决了什么问题?)。 [description_good]

    项目网站必须提供有关如何获取和提供反馈(错误报告或增强功能)以及如何贡献的信息。 [interact]

    关于如何贡献的信息必须解释贡献流程(例如,是否使用拉请求?) (需要网址) [contribution]

    https://ffmpeg.org/developer.html

    The above URL gives complete information regarding the contribution process. As a short summary: although mirrored on GitHub at https://github.com/FFmpeg/FFmpeg, the project does not accept pull requests as explained in https://github.com/FFmpeg/FFmpeg/pull/153. We instead use a mailing list ffmpeg-devel@ffmpeg.org instead; exact details are provided in the developer documentation link at the top.



    关于如何贡献的信息应包括对可接受的贡献的要求(例如,引用任何所需的编码标准)。 (需要网址) [contribution_requirements]
  • FLOSS许可证

    项目使用什么许可证发布?



    项目生产的软件必须作为FLOSS发布。 [floss_license]

    https://ffmpeg.org/legal.html provides complete information regarding the licensing of FFmpeg.

    A short summary quoted from the above is:

    FFmpeg is licensed under the GNU Lesser General Public License (LGPL) version 2.1 or later. However, FFmpeg incorporates several optional parts and optimizations that are covered by the GNU General Public License (GPL) version 2 or later. If those parts get used the GPL applies to all of FFmpeg.

    Read the license texts to learn how this affects programs built on top of FFmpeg or reusing FFmpeg. You may also wish to have a look at the GPL FAQ.

    Note that FFmpeg is not available under any other licensing terms, especially not proprietary/commercial ones, not even in exchange for payment.



    建议由项目生成的软件的任何必需的许可证是由开放源码促进会(OSI)批准的许可证(英文)[floss_license_osi]


    项目必须将其许可证在其源代码存储库中的标准位置发布。 (需要网址) [license_location]
  • 文档


    项目必须为项目生成的软件提供基本文档。 [documentation_basics]

    The documentation for FFmpeg is built from: https://git.ffmpeg.org/gitweb/ffmpeg.git/tree/HEAD:/doc. The documentation for the FFmpeg website is built from: https://git.ffmpeg.org/ffmpeg-web.

    As such, the recommended starting point for exploring the docs is: https://ffmpeg.org/documentation.html.

    FFmpeg provides security information such as CVE numbers and commits addressing them at: https://ffmpeg.org/security.html.



    项目必须提供描述项目生成的软件的外部接口(输入和输出)的参考文档。 [documentation_interface]

    https://ffmpeg.org/documentation.html - the starting reference for documentation.

    For some community documentation, please see: https://trac.ffmpeg.org/wiki. For a short tutorial, please see: http://dranger.com/ffmpeg/. For a short book, please see: http://ffmpeg.tv/.


  • 其他


    项目网站(网站,存储库和下载URL)必须使用TLS支持HTTPS。 [sites_https]

    该项目必须有一个或多个讨论机制(包括建议的更改和问题),可搜索,允许通过URL访问消息和主题,使新人能够参与一些讨论,并且不需要客户端安装专有软件。 [discussion]

    项目应该提供英文文档,并能够接受英文的代码的错误报告和评论。 [english]

    As can be seen at https://ffmpeg.org/documentation.html, all FFmpeg documentation is in English.



    必须维护该项目。 [maintained]


(高级)哪些用户还有额外权限编辑此徽章条目?目前:[]



  • 公开的版本控制的源代码存储库


    该项目必须有一个版本控制的源代码存储库。它必须是公开可读的并可通过URL访问。 [repo_public]

    项目的源代码存储库必须跟踪所做的更改,谁进行了更改,何时进行了更改。 [repo_track]

    https://git.ffmpeg.org/ffmpeg.git - it uses Git, and as such keeps track of the revisions. Note that revisions may also be viewed at the FFmpeg cvslog archives: https://lists.ffmpeg.org/pipermail/ffmpeg-cvslog/. Remark: The name cvslog dates to when the project used CVS. Now, the project uses Git.



    为了实现协作检视,项目的源代码存储库必须包括临时版本,以便检视版本之间的变化;它不得仅包括最终版本。 [repo_interim]

    FFmpeg's repository is public, so in addition to the release branches (e.g https://git.ffmpeg.org/gitweb/ffmpeg.git/shortlog/refs/heads/release/3.0), we have a branch for master (https://git.ffmpeg.org/gitweb/ffmpeg.git/shortlog/refs/heads/master). Developers also sometimes maintain their own private forks for work in progress, e.g https://github.com/gajjanag/FFmpeg).



    建议使用通用分布式版本控制软件(例如,git)作为项目的源代码存储库。 [repo_distributed]

    Git is currently used, as reflected by https://git.ffmpeg.org/ffmpeg.git .


  • 唯一版本编号


    项目生成的用于每个用户使用的版本必须具有唯一版本标识符。 [version_unique]

    https://ffmpeg.org/developer.html#Release-process-1 - this describes the release process. In particular, major and minor version numbers are maintained for releases.



    建议使用语义版本控制(SemVer)格式进行发布。 [version_semver]


    建议项目识别其版本控制系统中的每个版本。例如,建议使用git的项目,使用git标签识别每个版本。 [version_tags]
  • 发行说明


    该项目必须在每个版本中提供发布说明,这是该版本中主要变化的可读的摘要,以帮助用户确定是否应升级,升级影响将如何。发行说明不能是版本控制日志的原始输出(例如,“git log”命令结果不是发行说明)。其产出不适用于多个地点的项目(如单个网站或服务的软件),并采用持续交付,可以选择“N/A”。 (需要网址) [release_notes]

    https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/Changelog - this file keeps track of the release notes.



    发行说明必须列出每个新版本中修复的每个公开的漏洞。如果没有发行说明或者没有公开的漏洞,选择“不适用”。 [release_notes_vulns]

    https://ffmpeg.org/security.html - FFmpeg associates public vulnerabilities with the release that fixes them here.


  • 错误报告流程


    项目必须为用户提交错误报告(例如,使用问题跟踪器或邮件列表)提供相关流程。 (需要网址) [report_process]

    https://trac.ffmpeg.org/ - the bug tracker for FFmpeg.



    项目必须使用问题跟踪器来跟踪每个问题。 [report_tracker]

    https://trac.ffmpeg.org/ticket/5689 - an illustration of an individual ticket.



    该项目必须响应过去2-12个月内(含)提交的大多数错误报告;响应不需要包括修复。 [report_responses]

    该项目应该对过去2-12个月内(包括)的大部分(> 50%)的增强请求作出回应。 [enhancement_responses]

    https://trac.ffmpeg.org/query?status=closed&status=new&status=open&desc=1&order=priority - as can be seen here, all incoming reports are classified into categories, and can be associated with the "enhancement" type or the "wish" priority.

    Also clear from the above links is that a significant fraction are implemented.



    该项目必须有一个公开的报告和回复的档案供后续搜索。 (需要网址) [report_archive]

    https://trac.ffmpeg.org/report - this allows searching through the report database via a variety of queries.


  • 漏洞报告流程


    项目必须在项目网站上发布报告漏洞的流程。 (需要网址) [vulnerability_report_process]

    As seen at: https://ffmpeg.org/security.html, vulnerabilities are reported to ffmpeg-security@ffmpeg.org.



    如果支持私有漏洞报告,项目必须包括如何以保密的方式发送信息。 (需要网址) [vulnerability_report_private]

    As seen at: https://ffmpeg.org/security.html, vulnerabilities reported to ffmpeg-security@ffmpeg.org are private.



    该项目在过去6个月收到的任何漏洞报告的初始响应时间必须小于或等于14天。 [vulnerability_report_response]

    As can be seen at: https://ffmpeg.org/security.html, regular point releases are made to address security vulnerabilities. For further evidence of a regular response time, please see: https://security.googleblog.com/2014/01/ffmpeg-and-thousand-fixes.html.

    For more detailed statistics, please check the commit log - any commit addressing a CVE has the CVE number associated with it via the commit message.


  • 可工作的构建系统


    如果项目生成的软件需要构建使用,项目必须提供可以从源代码自动重新构建软件的可工作的构建系统。 [build]

    FFmpeg can be built on a variety of platforms, including but not limited to Windows, GNU/Linux, OS X, BSD's, Solaris. Generally, it may be accomplished via ./configure, make, make install with a few flags, see https://trac.ffmpeg.org/wiki/CompilationGuide/Generic for details.



    建议使用通用工具来构建软件。 [build_common_tools]

    FFmpeg uses make and the configure script is written in sh. The configure script relies on some standard utilities, like tr, grep, etc for testing the availability of components for building. A standard C compiler and linker are required, but FFmpeg does not restrict itself to a particular toolchain. For good performance, yasm is required for building assembly files, though this is not strictly needed as --disable-yasm is supported by configure.



    该项目应该仅使用FLOSS工具来构建。 [build_floss_tools]

    FFmpeg builds fine with FLOSS tools, please see e.g fate.ffmpeg.org.


  • 自动测试套件


    该项目必须使用至少一个作为FLOSS公开发布的自动测试套件(该测试套件可以作为单独的FLOSS项目维护)。 [test]

    FFmpeg uses the FATE automated test suite: http://fate.ffmpeg.org/. The client side infrastructure is maintained within the FFmpeg repo. Server side is maintained at https://git.ffmpeg.org/fateserver. For details on how this works, please see https://ffmpeg.org/fate.html.



    测试套件应该以该语言的标准方式进行调用。 [test_invocation]

    As seen from https://ffmpeg.org/fate.html, invoking the FATE test suite is usually as simple as make fate. To obtain the test samples, make fate-rsync pulls samples from the https://samples.ffmpeg.org/ directory.



    建议测试套件覆盖大部分(或理想情况下所有)代码分支,输入字段和功能。 [test_most]

    The code coverage is generally at a 66%-75% level. It is still being actively worked upon, with http://coverage.ffmpeg.org/ showing the current status.



    建议项目实施持续集成,将新的或更改的代码经常集成到中央代码库中,并对结果进行自动化测试。 [test_continuous_integration]

    A number of FATE clients are run, as can be seen from fate.ffmpeg.org. Clients get added and removed, but at any given moment there are a reasonable variety of CPU architectures, operating systems, and toolchains represented at fate.ffmpeg.org.


  • 新功能测试


    该项目必须有通用的策略(正式或非正式),当主要的新功能被添加到项目生成的软件中,该功能的测试应该同时添加到自动测试套件。 [test_policy]

    This is currently only an informal requirement, and generally is enforced only in libavcodec, where new encoders and decoders must be accompanied by tests.

    However, this is not uniformly enforced. Roughly, libavfilter tends to lack a lot of tests, and many new filters do not have tests associated with them immediately. It is the general expectation (informal) that tests will be added by the developer over time.



    该项目必须有证据表明,在项目生成的软件的最近重大变化中,已经遵守了添加测试的条款: test_policy [tests_are_added]

    Tests are lacking for all libraries except libavcodec.



    建议您在更改提案的说明文档中添加测试策略要求(请参阅test_policy)。 [tests_documented_added]

    As seen above, the adding of tests is currently quite informal. Documentation is present at https://ffmpeg.org/developer.html, but it is sometimes vague.


  • 警告标志


    该项目必须启用一个或多个编译器警告标志,“安全”语言模式,或者使用单独的“linter”工具查找代码质量错误或常见的简单错误,如果至少有一个FLOSS工具可以在所选择的语言实现此条款。 [warnings]

    There are FATE clients running the ubsan toolchain, valgrind, etc. Generally speaking, -Wall and some other warnings are enabled by default for all compilations.



    该项目必须处理警告。 [warnings_fixed]

    There are numerous commits in the repository addressing warnings, and patches are regularly submitted and reviewed for the same.

    However, it must be noted that as FFmpeg supports a variety of toolchains, some of which omit bogus warnings, and that too sometimes only for specific versions of the toolchain, it is infeasible to reach a 0 warnings policy across all FATE clients. Generally, on "standard" toolchains, such as GNU/Linux OR OS X + gcc OR clang, the warning count does not exceed 100, and most warning cleanup work addresses such toolchains.



    建议在实际情况下,项目以最严格方式对待项目生成的软件中的告警。 [warnings_strict]

    As noted above, as FFmpeg supports a variety of toolchains, some of which omit bogus warnings, and that too sometimes only for specific versions of the toolchain, it is infeasible to reach a 0 warnings policy across all FATE clients. Generally, on "standard" toolchains, such as GNU/Linux OR OS X + gcc OR clang, the warning count does not exceed 100, and most warning cleanup work addresses such toolchains.

    It is thus counterproductive to enforce a maximal strictness policy wrt warnings in FFmpeg. However, it should be noted that some developers experiment with additional warning combinations, and when the warnings stop being too noisy, the project is open to introducing these flags into the default set of warning flags.


  • 安全开发知识


    该项目必须至少有一个主要开发人员知道如何设计安全软件。 [know_secure_design]

    Nicholas George and Michael Niedermayer (among possibly others) are developers who understand the above principles and actively use them. Michael Niedermayer is perhaps the only currently active developer who meets all of the above criteria.



    该项目的主要开发人员中,至少有一个必须知道导致这类型软件漏洞的常见错误类型,以及至少有一种方法来对付或缓解这些漏洞。 [know_common_errors]

    FFmpeg uses Coverity (https://scan.coverity.com/), a number of FATE clients use aids like ubsan, Valgrind, Helgrind, etc.

    FFmpeg does address the issue of creating more secure defaults, defensive programming practices, etc from time to time.


  • 使用基础的良好加密实践

    请注意,某些软件不需要使用加密机制。

    项目生成的软件默认情况下,只能使用由专家公开发布和审查的加密协议和算法(如果使用加密协议和算法)。 [crypto_published]

    As seen from files like aes.c, blowfish.c, etc in libavutil/, FFmpeg only uses publicly known cryptographic algorithms by default.



    如果项目生成的软件是应用程序或库,其主要目的不是实现加密,那么它应该只调用专门设计实现加密功能的软件,而不应该重新实现自己的。 [crypto_call]

    FFmpeg reimplements common cryptographic primitives like AES, Blowfish, SHA, etc in files within FFmpeg. Many of them are simply used to meet a multimedia specification, and in many cases it is not security relevant. As FFmpeg is a very widely used library deployed in a variety of configurations, it is desired to have as few external dependencies as possible.



    项目所产生的软件中,所有依赖于密码学的功能必须使用FLOSS实现。 [crypto_floss]

    This may be seen by examining the source code.



    项目生成的软件中的安全机制使用的默认密钥长度必须至少达到2030年(如2012年所述)的NIST最低要求。必须提供配置,以使较小的密钥长度被完全禁用。 [crypto_keylength]

    Although FFmpeg does provide a low level DES API, it is used strictly for format interoperability and is thus not part of any security mechanism.



    项目产生的软件中的默认安全机制不得取决于已被破解的密码算法(例如,MD4,MD5,单DES,RC4,Dual_EC_DRBG)或使用不适合上下文的密码模式(例如,ECB模式几乎不适当,因为它揭示了密文中相同的块,如 ECB企鹅所示。CTR模式通常是不合适的,因为如果重复输入状态,则它不执行认证并导致重复)。 [crypto_working]

    FFmpeg does implement and export a number of low level cryptographic primitives, some of which are broken such as MD5 and single DES. However, it should be noted that the usage of these primitives within FFmpeg are confined to instances where it is necessary in order to meet some specification.



    由项目产生的软件中的默认安全机制不应该依赖于具有已知严重弱点的加密算法或模式(例如,SHA-1密码散列算法或SSH中的CBC模式)。 [crypto_weaknesses]

    Same remarks as above. In particular, SHA-1 is used for creating identifiers, and is not used for a security purpose.



    项目产生的软件中的安全机制应该​​对密钥协商协议实施完美的前向保密(PFS),如果长期密钥集合中的一个长期密钥在将来泄露,也不能破坏从一组长期密钥导出的会话密钥。 [crypto_pfs]


    如果项目产生的软件存储用于外部用户认证的密码,则必须使用密钥拉伸(迭代)算法(例如,PBKDF2,Bcrypt或Scrypt)将密码存储为每用户盐值不同的迭代散列 。 [crypto_password_storage]

    FFmpeg does not store passwords for authentication of external users.



    由项目生成的软件中的安全机制必须使用密码学安全的随机数生成器生成所有加密密钥和随机数,并且不得使用密码学不安全的生成器。 [crypto_random]

    As can be seen from https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/libavutil/random_seed.c, FFmpeg makes a best effort at providing a cryptographically secure random number generator.


  • 安全交付防御中间人(MITM)的攻击


    该项目必须使用一种针对MITM攻击的传递机制。使用https或ssh + scp是可以接受的。 [delivery_mitm]

    PGP signatures are provided: https://ffmpeg.org/download.html#releases. The download is over https.



    不得通过http协议获取加密散列(例如,sha1sum)并直接使用,而不检查密码学签名。 [delivery_unsigned]

    PGP signatures are provided: https://ffmpeg.org/download.html#releases. The download is over https.


  • 修正公开的漏洞


    被公开了超过60天的中等或更高严重程度的漏洞,必须被修复。 [vulnerabilities_fixed_60_days]

    FFmpeg fixes public vulnerabilities much more quickly than this. Please see the commit logs for evidence of this.



    项目在得到报告后应该迅速修复所有致命漏洞。 [vulnerabilities_critical_fixed]

    FFmpeg has a track record of fixing CVE's promptly. Some evidence for this: 1. https://ffmpeg.org/security.html 2. Commit logs - all CVE related commits have the CVE number included in the message 3. https://security.googleblog.com/2014/01/ffmpeg-and-thousand-fixes.html.


  • 其他安全问题


    公共存储库不得泄漏旨在限制公众访问的有效私人凭证(例如,工作密码或私钥)。 [no_leaked_credentials]

  • 静态代码分析


    如果至少有一个FLOSS工具以所选择的语言实现此条款,则至少需要将一个静态代码分析工具应用于软件发布之前任何提议的主要生成版本。 [static_analysis]

    FFmpeg uses Coverity (scan.coverity.com) before production releases, which checks for a variety of common C programming mistakes. It should be noted that Coverity is not perfect, and there are false positives which is why FFmpeg does not necessarily "clear" the list before release. Nevertheless, an effort is made to fix Coverity reports before release.



    建议至少有一个用于static_analysis标准的静态分析工具包括在分析语言或环境中查找常见漏洞的规则或方法。 [static_analysis_common_vulnerabilities]

    FFmpeg uses Coverity (scan.coverity.com), which checks for a variety of common C programming mistakes.



    使用静态代码分析发现的所有中,高严重性可利用漏洞必须在确认后及时修复。 [static_analysis_fixed]

    FFmpeg fixes exploitable vulnerabilities promptly, regardless of whether they are found via static analysis (e.g privately via Coverity) or made public.



    建议每次提交或至少每天执行静态源代码分析。 [static_analysis_often]

  • 动态代码分析


    建议在发布之前,至少将一个动态分析工具应用于软件任何发布的主要生产版本。 [dynamic_analysis]


    建议如果项目生成的软件包含使用内存不安全语言编写的软件(例如C或C++),则至少有一个动态工具(例如,fuzzer或web应用扫描程序)与检测缓冲区覆盖等内存安全问题的机制例行应用。如果该项目生成的软件没有以内存不安全语言编写,请选择“不适用”(N / A)。 [dynamic_analysis_unsafe]

    Fuzzing is certainly performed quite regularly on FFmpeg: https://security.googleblog.com/2014/01/ffmpeg-and-thousand-fixes.html, http://obe.tv/about-us/obe-blog/item/26-fuzzing-ffmpeg-for-fun-and-profit. Note that this is being done by third parties.



    建议由项目生成的软件包括许多运行时断言,在动态分析期间检查。 [dynamic_analysis_enable_assertions]

    FFmpeg uses assertions at various locations in the code (https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/libavutil/random_seed.c).



    通过动态代码分析发现的所有严重性为中,高的可利用漏洞必须在确认后及时修复。 [dynamic_analysis_fixed]

    FFmpeg does tend to fix vulnerabilities discovered via dynamic code analysis in a timely fashion: https://security.googleblog.com/2014/01/ffmpeg-and-thousand-fixes.html, http://obe.tv/about-us/obe-blog/item/26-fuzzing-ffmpeg-for-fun-and-profit. Note that is being done by third parties.



此数据在知识共享署名3.0版本许可证(CC-BY-3.0)下可用,并依据核心基础设施计划 使用条款。所有数据都可以自由分享和演绎,但必须给予适当的署名。请署名Ganesh Ajjanagadde和OpenSSF最佳实践徽章贡献者。

项目徽章条目拥有者: Ganesh Ajjanagadde.
最后更新于 2016-07-04 19:43:22 UTC, 最后更新于 2016-07-17 01:18:29 UTC。

后退