Skip to content

Commit

Permalink
Add a policy page on third party code usage.
Browse files Browse the repository at this point in the history
  • Loading branch information
Crell committed Oct 22, 2024
1 parent 9d9ba77 commit 42fde19
Show file tree
Hide file tree
Showing 2 changed files with 184 additions and 0 deletions.
3 changes: 3 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ It contains the following items:
process on how and when to update the `security.txt
<https://www.php.net/.well-known/security.txt>`_ file on https://www.php.net.

- `Third-Party code <third-party-code.rst>`_: The circumstances under which the PHP
project will use PHP code written by third parties in the ecosystem.

************
Formatting
************
Expand Down
181 changes: 181 additions & 0 deletions third-party-code.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
######################
Third Party Code Usage
######################

**************
Introduction
**************

The PHP project may leverage code written by others, of which the PHP ecosystem
has an ample supply. However, it also wants to avoid giving the appearance of
endorsing or recommending any particular tool over other equally-capable competitors,
even if unintentionally. This document provides a heuristic and process for
addressing that balance.

************
Definitions
************

***PHP tooling**
Refers to the code behind the PHP.net website, the documentation generator project PhD, the PHP wiki, and other similar systems. In general, “PHP code run by PHP.net.”

**Documentation**
Refers to objective information about PHP, the PHP language, the PHP standard library, and PHP ecosystem hosted on PHP.net. This may include reference material, tutorials, FAQs, and similar.

**Marketing material**
Refers to content on PHP.net or similar sites intended to promote or evangelize PHP the language or ecosystem.

**Libraries**
Refers to existing third party code packages or tools, either C extensions or PHP code, maintained by someone other than the PHP Internals team. It also includes command line utilities used primarily by a developer. It may also refer to non-profit PHP ecosystem organizations, such as the PHP Foundation or PHP-FIG.

**Web Application**
Refers to a “full” web framework that provides end-to-end web application capabilities, or an installable complete application. It does not refer to command line utilities used primarily by developers building applications.

**Approved license**
Refers to a license `approved by the Free Software Foundation as Free Software
<https://www.gnu.org/licenses/license-list.en.html>`_, and that is inbound compatible with GPLv3.

*******************
Approval Heuristics
*******************

PHP Tooling
===========

PHP tooling MAY make use third party libraries, provided that the library meets all of the “Inclusion” criteria, and does not meet any of the “Exclusion” criteria.

Inclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library must have a stable >= 1.0 release, and have had one for at least a year. (This is to ensure it has longevity.)
2. The library provides targeted, necessary functionality.
3. The library is a recognized de facto standard, or one of a small number of de facto standards, in its problem space.
4. The library is available under an Approved License.

Exclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library is a Web Application
2. The library is not available under an Approved License.
3. The library has shown no meaningful activity for one year prior to its first inclusion.

PHP tooling maintainers MAY use their judgement to determine if a library meets the above criteria, but SHOULD be conservative in their interpretation of whether or not a library satisfies the necessary criteria.

Explicitly approved libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following libraries have been explicitly approved by RFC vote.

* Composer
* PHPUnit
* Xdebug
* PHPStan
* Psalm
* Any library or PSR published by the PHP-FIG

Explicitly rejected libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

None


PHP Documentation
=================

Documentation MAY reference and link to third party libraries, provided that the library meets all of the “Inclusion” criteria, and does not meet any of the “Exclusion” criteria. Additionally, the language used to refer to the library must also follow the criteria below.

Inclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library must have a stable >= 1.0 release, and have had one for at least a year.
2. The library provides a use that is commonly needed by many types of projects, making it of broad interest to the PHP ecosystem.
3. The library is a recognized de facto standard, or one of a small number of de facto standards, in its problem space. If there are a small number of de facto standard libraries, then all should be listed and given equal weight.
4. The library is available under an Approved License.
5. The language used to describe the library does not imply that the PHP Project is involved in or specifically recommends the library over some other.


Exclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library is one of many (more than ~4) viable options in its problem space, even if it is the most common of those many options.
2. The library is a Web Application.
3. The library is not available under an Approved License.
4. The library has shown no meaningful activity for one year prior to its first mention.
5. The library is not of broad interest to the PHP ecosystem.

PHP tooling maintainers MAY use their judgement to determine if a library meets the above criteria, but SHOULD be conservative in their interpretation of whether or not a library satisfies the necessary criteria.

Explicitly approved libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following libraries have been explicitly approved by RFC vote.

* Composer
* PHPUnit
* Xdebug
* PHPStan
* Psalm
* Any library or PSR published by the PHP-FIG

Explicitly rejected libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

None

Marketing Material
==================

Marketing material MAY reference and link to third party libraries, provided that the library meets all of the “Inclusion” criteria, and does not meet any of the “Exclusion” criteria. Additionally, the language used to refer to the library must also follow the criteria below.

Inclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library must have a stable >= 1.0 release, and have had one for at least a year.
2. The library provides a use that is commonly needed by many types of projects, making it of *significant interest to the PHP ecosystem*.
3. The library is a recognized de facto standard, or one of a small number of de facto standards, in its problem space. If there are a small number of de facto standard libraries, then all should be listed and given equal weight.
4. The library MAY be a Web Application, provided its mention clearly does not specifically endorse the Application. If many options exist in a space that bears mention, the most common should be given equal exposure.
5. The library is available under an Approved License.
6. The language used to describe the library does not imply that the PHP Project is involved in or specifically recommends the library over some other.

Exclusion criteria
~~~~~~~~~~~~~~~~~~

1. The library is not available under an Approved License.
2. The library has shown no meaningful activity for one year prior to its first mention.
3. The library is not of broad interest to the PHP ecosystem.

PHP marketing material maintainers MAY use their judgement to determine if a library meets the above criteria, but SHOULD be conservative in their interpretation of whether or not a library satisfies the necessary criteria.

Explicitly approved libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following libraries have been explicitly approved by RFC vote.

* Composer
* PHPUnit
* Xdebug
* PHPStan
* Psalm
* Any library or PSR published by the PHP-FIG

Explicitly rejected libraries
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

None

*******************
Conflict Resolution
*******************

Should there be a reasonable dispute as to whether a given library satisfies the criteria above, an RFC may be posted to explicitly approve the library for one or more of the above cases. The RFC MUST have a 2/3 vote threshold to approve the library. If the library is rejected, it may be revisited after six months, like any other RFC.

Additionally, a library that does not satisfy the above criteria MAY be granted an exception by RFC vote. The RFC MUST acknowledge the reasons the library does not meet the above criteria and why it is necessary for the PHP project to make use of or reference it anyway. The RFC MUST have a 2/3 vote threshold to approve the library.

*******************
Approved Exceptions
*******************

PHP Tooling
===========

* Dokuwiki

0 comments on commit 42fde19

Please sign in to comment.