====== PHP RFC: Deprecate Bundling PEAR/PECL & Replace with composer/pickle ====== * Version: 0.1 * Date: 2016-09-01 * Author: Davey Shafik, davey@php.net * Status: Under Discussion * First Published at: http://wiki.php.net/rfc/deprecate-pear-include-composer ===== Introduction ===== As the community moves on from PEAR and migrates to composer, the inclusion of PEAR in the PHP package is starting to make less and less sense. [[https://twitter.com/dshafik/status/756337267547832320|{{:rfc:davey_shafik_on_twitter_thinking_about_an_rfc_to_remove_pear_from_php_8_0_thoughts_.png?nolink|}}]] ===== Proposal ===== As PEAR becomes less relevant, we should deprecate bundling it in favor of more modern, community chosen tools — specifically composer. PEAR however also comprises PECL, so this RFC also proposes that we move to [[https://github.com/FriendsOfPHP/pickle|pickle]], an alternative written (primarily) by Anatol Belski and Pierre Joye. Pickle is based on composer and backwards compatible with pecl packages as well as supporting RCS systems similar to composer. We would like to deprecate bundling pear/pecl in 7.2, and unbundle them in 8.0. At the same time, we'd like to include composer/pickle as //optional// (under build flags ''--with-composer'' and ''--with-pickle'') for 7.2, then enabled by default in 7.3. The deprecation would come in the form of updating documentation on php.net (e.g. [[http://php.net/manual/en/configure.about.php|configure flags]]) and with a notice at the end of ./configure and during the "make" steps. PEAR is: - A command-line package management tool for installing and updating packages of PHP code over the Internet. - A curated default "channel" for the package management tool, at pear.php.net - The coding style guidelines for publishing on that channel - An ecosystem of packages built to those guidelines This proposal does not affect 2-4, and only proposes that we deprecate/stop bundling (1), and instead bundle composer as a modern alternative. Additionally, PECL is: - An //alias// of the PEAR command-line tool for managing extensions to PHP itself. - A default channel for the extension management tool, at pecl.php.net Because (1) is an alias of the PEAR command-line tool, deprecating/unbundling the latter, will also deprecate/unbundle the former. Therefore we are proposing the inclusion of pickle instead, as a natural (backwards compatible) companion to composer. ===== Backward Incompatible Changes ===== None till 8.0, when pear/pecl will be unbundled. If the projects continue to functions, they can continue to provide methods for manual installation. ===== Proposed PHP Version(s) ===== * PHP 7.2: Deprecate pear/pecl, bundle composer/pickle, enable optionally * PHP 7.3: Enable composer/pickle by default * PHP 8.0: Unbundle pear/pecl ===== RFC Impact ===== ==== To SAPIs ==== None ==== To Existing Extensions ==== None ==== To Opcache ==== None ==== New Constants ==== None ==== php.ini Defaults ==== None ===== Open Issues ===== ===== Proposed Voting Choices ===== As this does not include any language changes, this should be a simple 50%+1 vote. However, this will be discussed before voting begins. Potential voting choices: - Deprecate pear/pecl & unbundle in 8.0 (Choices: yes/no) - Include composer/pickle (Choices: yes/no) - Make composer/pickle default in which version? (Choice: 7.2/7.3/8.0/Never) ===== Patches and Tests ===== The patch will refactor the current pear ''make'' code to be re-usable by composer/pickle. ===== Implementation ===== After the project is implemented, this section should contain - the version(s) it was merged to - a link to the git commit(s) - a link to the PHP manual entry for the feature ===== References ===== * [[https://twitter.com/dshafik/status/756337267547832320|Twitter poll]] * [[http://getcomposer.org|Composer]] * [[https://github.com/friendsofphp/pickle|Pickle]] ===== Rejected Features ===== Keep this updated with features that were discussed on the mail lists.