Upgrade to Pro — share decks privately, control downloads, hide ads and more …

It Was BSD All Along: Relicensing PHP After 30 ...

It Was BSD All Along: Relicensing PHP After 30 Years (FOSSY 2026)

In early 2020, someone asked a question on a PHP mailing list that I couldn't stop thinking about. Their employer only allowed OSI-approved licenses, and while php.net claimed the PHP License 3.01 was approved, the OSI's own website showed approval only for version 3.0. I volunteered to sort it out, and a few months later the OSI granted legacy approval for 3.01. But the question stuck with me, and the closer I looked, the stranger PHP's licensing history got.

PHP didn't always have its own license. It began under the GPL, became dual-licensed, then settled into the custom PHP and Zend Engine licenses it kept for over two decades. Neither was GPL-compatible; one was never OSI-approved. Yet strip away the conditions specific to the PHP Group and Zend, and what remains is, almost word for word, BSD-3-Clause. Making it official meant answering a question with no obvious answer: who has the authority to relicense a 30-year-old language whose contributors never signed an agreement?

This is the story of how I answered that question and steered the new license through, and what it taught me about copyright, license stewardship, and the distance between what a license intends and what it says. It's one project's story, not a how-to guide—every situation is different, and I'm not a lawyer—but PHP's is a strange and instructive one, and a window into how tangled software licensing can be.

Avatar for Ben Ramsey

Ben Ramsey PRO

August 07, 2026

More Decks by Ben Ramsey

Other Decks in Programming

Transcript

  1. It Was BSD All Along Relicensing PHP After 30 Years

    Ben Ramsey • FOSSY • 7 Aug. 2026
  2. THE QUESTION A routine compliance question opened 30 years of

    history phpdbg Company policy: OSI-approved licenses only
  3. COMPLIANCE Substantively identical was not enough 3.0 ≈ 3.01 Policy

    required formal approval, not interpretation.
  4. “ The fact that 3.0 and 3.01 are substantively identical

    is no use to us at all. MATTHEW SHEAHAN • 3 MAR. 2020
  5. THE MISSED CLUE The other license never entered the conversation

    Zend Engine License 2.0 OSI status: not approved
  6. THE FIRST FIX Legacy approval solved the reported problem May

    2020 One license approved. The two-license structure remained.
  7. 01 How did PHP get here? One language. Two custom

    licenses. Three decades of history.
  8. 1995 PHP began under GPLv2 PHP 1 → GPLv2 The

    licensing story began alongside the free software movement and the nascent open source movement.
  9. “ A number of significant projects have abandoned the GPL

    in favour of less restrictive licensing terms. […] PHP, if I can help it, will always be free. But, I am not against letting commercial entities take a shot at a commercial version as long as the terms are such that the major contributors don’t feel cheated. RASMUS LERDORF • 23 OCT. 1997
  10. LICENSE ANCESTRY The custom license came from Apache 1.0 BSD

    1995 1998 4-clause roots Apache 1.0 PHP custom license
  11. THE FIRST ADDITION The first extra restriction was already troublesome

    PHP 3.0.14 — CONDITION 1 Commercial redistribution of larger works derived from, or works which bundle PHP, requires written permission... REMOVED
  12. PHP 4 PHP 4 ended dual licensing and added another

    license PHP License + Zend License
  13. THE ARCHITECTURAL PREMISE The Zend split assumed the engine could

    stand alone PHP ≠ Zend A plausible future in 2000.
  14. “ I think there is still some confusion about what

    role exactly Zend plays in the PHP infrastructure. The host language (PHP) uses the base services provided by the engine (Zend)—services such as memory allocation, persistent resources, compilation, and execution. PHP itself then provides the function libraries, interfaces to the Web servers, .ini file support, etc. ANDREI ZMIEVSKI • LINUXPOWER • 15 NOV. 1999
  15. “ I’d very much like to see the Zend engine

    embedded in MySQL at some point. I think it would be great to be able to write the stored procedure code of the DB in the same language as the scripting engine used to access the DB. ANDI GUTMANS • LINUXPOWER • 15 NOV. 1999
  16. THE LONG PAUSE The software evolved while the licenses stood

    still 2002 2006 2026 PHP 3.0 / Zend 2.0 PHP 3.01 Same custom terms
  17. 02 Intent and text drift apart What everyone meant was

    no longer what every clause clearly said.
  18. TWENTY-FIVE YEARS LATER PHP and Zend were no longer separable

    The reason for two licenses had disappeared. Jurga Ka / Unsplash
  19. PHP LICENSE 3.01 The PHP License mixed permission with project

    control - Name - Acknowledgement - Change authority Copyright terms, branding rules, and stewardship lived together.
  20. ZEND ENGINE LICENSE 2.0 Zend carried its own historical baggage

    - Advertising clause - Acknowledgement - Change authority Plus a second license authority inside the same repository.
  21. MACHINE-READABLE REALITY An SBOM records what the license says not

    what maintainers meant Intent does not fit in a policy gate.
  22. AUTOMATED COMPLIANCE Automation cannot infer the community’s intent OSI? GPL?

    SPDX? Tools evaluate metadata, approval status, and compatibility.
  23. THE AMBIGUITY WAS ALREADY VISIBLE Debian and extensions kept finding

    edge cases Patched distributions. PECL packages. Project-specific wording.
  24. “ Please pick an existing, well-known license so that we

    do not have to argue again over whether this really solves all of the problems. WALTER LANDRY • 30 JUL. 2014
  25. THE REVEAL Remove the project-specific clauses It was BSD all

    along. The familiar license was already underneath.
  26. THE CENTRAL OBSTACLE The obvious answer raised the hardest question

    Who can say yes? A 30-year-old project had no single copyright owner.
  27. COPYRIGHT Every contributor owns their contribution many copyrights A project

    copyright notice does not erase individual ownership.
  28. WHAT CONTRIBUTION MEANS A contribution grants a license, not ownership

    License ≠ Assignment PHP contributors never transferred their copyrights to one body.
  29. THE USUAL RELICENSING PROBLEM Ordinary relicensing asks everyone 30 years

    × many owners That path would be impractical for PHP.
  30. PHP LICENSE — CLAUSE 5 The PHP Group already held

    change authority THE UPGRADE CLAUSE The PHP Group may publish revised and/or new versions of the license from time to time...
  31. THE ADOPTED CHANGE PHP License 4 and Zend Engine License

    3 are BSD-3-Clause The standard license itself, not another adaptation.
  32. THE REPOSITORY One standard license now covers PHP and Zend

    sources SPDX-License-Identifier: BSD-3-Clause One license file. No separate Zend license.
  33. EXISTING CODE Users keep their choices; maintainers gain a simpler

    one Old terms remain available AND New version available
  34. THE LESSON The freedoms did not change The ambiguity did.

    License stewardship means keeping text, software, and community aligned.
  35.  DISCUSSION Questions? ben.ramsey.dev  phpc.social/@ramsey  github.com/ramsey  www.linkedin.com/in/benramsey

    [email protected] It Was BSD All Along: Relicensing PHP After 30 Years Copyright © 2026 Ben Ramsey This work is licensed under Creative Commons Attribution-ShareAlike 4.0 International. For uses not covered under this license, please contact the author. Ramsey, Ben. “It Was BSD All Along: Relicensing PHP After 30 Years.” FOSSY, 7 Aug. 2026, University of British Columbia, Vancouver, BC, CA.
  36. REFERENCES Bibliography “Apache License 1.0.” SPDX, spdx.org/licenses/Apache-1.0.html. “BSD 3-Clause ‘New’

    or ‘Revised’ License.” SPDX, spdx.org/licenses/BSD-3-Clause.html. “BSD 4-Clause ‘Original’ or ‘Old’ License.” SPDX, spdx.org/licenses/BSD-4-Clause.html. Landry, Walter. Reply to “Debian and the PHP license.” php-pecl, 30 Jul. 2014, 22:34:51. PHP Mailing Lists, news-web.php.net/ php.pecl.dev/12119. Lerdorf, Rasmus. Reply to “license issues.” php-dev, 29 Jun. 1999. PHP Mailing Lists, news-web.php.net/php.dev/7762. PHP Development Team. “LICENSE.” PHP, version 3.0, 6 Jun. 1998, museum.php.net/php3/. “PHP Licensing.” PHP, www.php.net/license/, accessed 2 Aug. 2026. Ramsey, Ben. “PHP RFC: PHP License Update.” PHP Wiki, 6 Apr. 2026, wiki.php.net/rfc/php_license_update?rev=1775434811. Sheahan, Matthew. “OSI approval for PHP 3.01 license.” php-general, 3 Mar. 2020, 22:13:54. PHP Mailing Lists, news-web.php.net/ php.general/327010.