English Japanese
Compiler Flags: Pre-packaged program binaries and program libraries not built from the source code were probably not compiled with standard Fedora compiler flags for security and optimization.
Content binaries (such as .pdf, .png, .ps files) are _not_ required to be rebuilt from the source code.
If you are in doubt as to whether something is considered a program binary or a program library, here is some helpful criteria:
Is it executable? If so, it is probably a program binary.
Does it contain a `+.so+`, `+.so.#+`, or `+.so.#.#.#+` extension? If so, it is probably a program library.
If in doubt, ask your reviewer. If the reviewer is not sure, they should ask the Fedora Packaging Committee.
Packages which require non-open source components to build are also not permitted (e.g. proprietary compiler required).
When you encounter prebuilt binaries in a package you *MUST*:
Remove all pre-built program binaries and program libraries in %prep prior to the building of the package. Examples include, but are not limited to, `+*.class+`, `+*.dll+`, `+*.DS_Store+`, `+*.exe+`, `+*.jar+`, `+*.o+`, `+*.pyc+`, `+*.pyo+`, `+*.egg+`, `+*.so+`, `+*.swf+` files.
Ask upstream to remove the binaries in their next release.
Exceptions
Some software (usually related to compilers or cross-compiler environments) cannot be built without the use of a previous toolchain or development environment (open source). If you have a package which meets this criteria, contact the Fedora Packaging Committee for approval. Please note that this exception, if granted, is limited to only the initial build of the package. You may bootstrap this build with a "bootstrap" pre-built binary, but after this is complete, you must immediately increment Release, drop the "bootstrap" pre-built binary, and build completely from source. Bootstrapped packages containing pre-built "bootstrap" binaries must not be pushed as release packages or updates under any circumstances. These packages should contain the necessary logic to be built once bootstrapping is completed and the prebuilt programs are no longer needed. Information about how you should break circular dependencies by bootstrapping can be found xref:index.adoc#bootstrapping[here].
An exception is made for binary firmware, as long as it meets the requirements documented https://fedoraproject.org/wiki/Licensing:Main#Binary_Firmware[here].
Some pre-packaged program binaries or program libraries may be under terms which do not permit redistribution, or be affected by legal scenarios such as patents. In such situations, simply deleting these files in %prep is not sufficient, the maintainer will need to make a modified source that does not contain these files. See: xref:SourceURL.adoc#when-upstream-uses-prohibited-code[When Upstream uses Prohibited Code].
Pregenerated code
Often a package will contain code which was itself generated by other code. This often takes the form of configure files or parsing code generated by bison/yacc or lex/flex.
It is required that the original source files from which the code was generated be included in the source package. Generally these files are part of the source archive supplied by upstream, but it may be necessary to fetch those files from an upstream source repository and include them in the source package as separate Source: entries.
It is preferred, but not required, that the tools used to generate such code be free software and included in Fedora.
It is suggested, but not required, that such code be regenerated as part of the build process. The means for doing this are entirely specific to the individual package being built, but it may happen automatically if the necessary dependencies are present at build time.