The Past, Present and Future of the PHP-FIG

Share this article

The Past, Present and Future of the PHP-FIG

The PHP Framework Interoperability Group (PHP-FIG, or just FIG for short) is at a crossroads. Many electrons have been sacrificed talking about FIG’s tribulations of late, but sadly much of it has been FUD, with little effort spent on the positive. At SitePoint’s invitation, I’d like to offer a more positive outlook on FIG and the PHP community, and demonstrate why FIG can, and should, continue to have a positive impact on the PHP ecosystem.

Illustration of an ancient War Council

By way of introduction, I am the FIG representative for Drupal and have been continually since November 2009, just shy of 7 years now, making me one of the longest-running FIG representatives. I was the Editor of PSR-6 and the current Editor of PSR-13, and also helped on the PSR-3 and PSR-7 specifications in particular. Along with Phil Sturgeon I helped design the current FIG workflow for PSRs. On the Drupal side, I was one of the main drivers behind Drupal 8 adopting PSR-0 and PSR-3.

An Uncomfortable Beginning

FIG was founded in 2009 under the name “PHP Standards Group” after an initial meeting at php[tek] in Chicago in May. Initially it was setup with a mailing list at standards@lists.php.net, with the purported goal of establishing its first spec — the PSR-0 autoloading standard — and presumably others as community-wide standards.

The unsurprising “who do you think you are?” backlash to that presumption was swift and decisive, and the group was quickly thrown off of lists.php.net, instead setting up a Google Group for coordination. Little else was done by the PHP Standards Group for the next few years, other than admitting a few additional people/projects in late 2009 (including yours truly, representing Drupal). The PHP Standards Group hadn’t yet earned the right to call itself that in the eyes of the community.

Slow but Steady Growth

Fast forward to October 2011. After being completely dead for 2 years, the group started to come alive again. It renamed itself to the hopefully-less-controversial “Framework Interoperability Group”, although it still had no effective bylaws nor a defined mission statement, working instead on “whatever we decide to work on.” Among the specs that were tackled in that period were the PSR-1 coding standards, PSR-2 coding style standards, and PSR-3 logging interface.

There was some debate around whether interfaces were even “fair game” for FIG to define, since it had no mission statement. Therefore, in March 2013 I ran a poll to gauge whether those involved in FIG (both project members and otherwise) favored “soft specs” (like coding standards) or “hard specs” (like interfaces), and the results came back solidly for “all of the above, but with lean toward interfaces”. A similar poll, shortly afterward, showed a modest lean toward forward-looking but practice-informed specs (rather than “only document what’s been done” or “build new stuff from whole cloth” extremes).

Despite the “framework” in the name, FIG was also never limited to just “framework-ish” projects. Aside from being an extremely ill-defined word to begin with, FIG’s membership quickly grew to the point that pure-framework members were a decided minority alongside stand-alone libraries, CMSes, Wikis, e-commerce suites, and other stand-alone applications. The benefits of collaboration and interoperability are not limited to “frameworks”.

Participation in FIG was also ill-defined. The initial founders were mostly project leads, but not entirely. Early on, there were many debates on whether members were “people” or “projects”; that is, were FIG members ambassadors acting on behalf of their projects, or were they simply people determined “cool enough” to have a vote for life by virtue of happening to lead a project? That was put to a vote in April 2013, and the bylaws clearly amended to make voting representatives ambassadors on behalf of their project. Despite the clear result, a select few refused to acknowledge that decision and act as though it never happened; there was some validity to their claim as in practice one is always interacting with a person, not with a “project”, and humans are humans, but the group and the bylaws had spoken.

Another issue that arose was the ownership of a spec in development. Technically no one was responsible for anything, so multiple specs (those which became the PSR-4 autoloading standard and the PSR-6 caching standard) had multiple competing versions from different people and no one could keep track of which was the “real” version. Clearly that was suboptimal.

In July of 2013, therefore, the group adopted a new workflow bylaw, authored primarily by Phil Sturgeon and myself, which defined a clear Editor, Coordinator, and Sponsor for a PSR in draft, creating the skeleton of a working group. Under that model, the group passed the PSR-4 autoloading standard, PSR-6 cache standard, and PSR-7 HTTP messaging standard.

A Community-Wide Impact

The various PSRs that FIG has published have, of course, impacted the PHP community far beyond the handful of member projects. Defined standards in a vacuum have a way of doing that.

  • PSR-0 was a key enabler for Composer, which has transformed the PHP ecosystem.
  • PSR-1 and PSR-2 together are now a preset in many IDEs, which makes them the default coding standard for nearly all PHP projects (except a select few with massive code bases that predate PSR-2, for whom switching is impractical despite pressure to do so).
  • The PSR-3 logger has been installed, according to Packagist, over 37 million times. For PSR-7, it’s around 11 million.
  • The PSR-7 HTTP messaging standard has spawned a cottage industry of experimentation with HTTP middleware that has already been adopted to some degree or another by many if not most major projects.

Despite its contentious beginnings, FIG has effectively become the standards body for PHP. It took time for it to earn it, but it did, thanks to the work of dozens of people, both FIG members and not. A Reddit thread started last January showed that, while not universal, there was a clear preference for FIG to step up and accept that role formally.

Today, FIG has a number of specs in various stages of development, ranging from just-getting-started to nearly-complete, including:

Most of the Editors of those proposals are not themselves FIG members. Whatever the intent of the initial half dozen people, FIG has long since grown beyond its humble beginnings.

Growing Pains

Nevertheless, FIG’s internal process hasn’t grown up with the group as well. Initially modeled on the free-for-all chaos of PHP-Internals, it has adopted process as needed. (Although it might be more accurate to say that it initially wasn’t modeled on anything other than “we haz a mailing list”.) Many people in recent years have pointed out FIG’s structural issues.

  • Being a project lead doesn’t necessarily make someone the best at designing standards, whether interface standards or more “soft” specs.
  • Most project leads, or their representatives, have plenty of things on their plate besides FIG and so frequently pay attention only during votes, even if then. Several votes have failed simply due to lack of quorum, and many mundane administrative tasks simply went unaddressed as no one knew who was supposed to even do them.
  • Although the single Editor makes for a clear point-of-authority, that person may not be the only, or best, authority on the topic of a given spec. In an ideal case, many people directly involved in or impacted by a spec would have an equal seat at the table.
  • The process is still too opaque to outsiders, and even to some insiders. It’s sometimes difficult to tell where to get involved in a given spec, as there’s no consistency at all.
  • The membership rules still privilege project leads over anyone else; the PHP community has dozens upon dozens of smart, skilled developers who would be valuable to have working on specs, but because they’re not a project lead or a lieutenant of a project lead, they’re never allowed a vote.
  • Despite that, the idea that FIG’s work impacts only member projects has become, as shown above, almost comically naive. Yet only a select few are even welcome at the table.

In late 2015, FIG added a 3-person Secretary position, elected by project reps, to handle managerial tasks but stay out of technical tasks. I personally feel that change has been a resounding success, as managerial tasks are actually getting done now, and the secretaries have been able to help standardize and formalize much of the necessary paperwork around creating specs. (There’s more to it than just talking a bit!) Still, though, FIG is incomplete.

That came to a head in December 2015 and into January, with several threads discussing FIG’s various shortcomings. I tried to draw them together into a broader view of the “State of FIG” in mid-December, which spawned a lengthy but lively conversation, largely with agreement on the problems. That included discussion of the process followed by other standards bodies, including ISO and IETF. That, in turn, led me to post, in mid-January, a proposal concept inspired by IETF that I dubbed “FIG 3.0”. (FIG 2 being the Editor/Coordinator/Sponsor model from 2013, FIG 1 the total free-for-all before that.) I encourage those who are interested in the subject to read at least the start of those threads for background.

The proposal met with widespread approval, although not universally so. I therefore set about turning the brain dump into a more formal change to the bylaws, with a great deal of help from Michael Cullum, which was posted to the list in April.

FIG 3.0

The full proposal is viewable in the pull request, and Michael has written a very good summary of its major changes. I will summarize them only briefly here.

First, and most importantly, it adds a for-reals mission statement to FIG:

The PHP Framework Interoperability Group (The PHP FIG) aims to advance the PHP ecosystem and promote good standards by bringing together projects and people to collaborate. It develops and publicises standards, informed by real-world experience as well as research and experimentation by itself and others, to form PHP Standard Recommendations (PSRs).

That is not actually a new concept. It is formalizing, in writing, what FIG is already doing and has been for some time, and supported by the polls conducted previously.

Second, Working Groups become larger with a minimum size of 5. Those Working Group members can be project-affiliated or not, but are intended to be those with a direct stake in a given spec. Cache library authors for a caching library, for instance, or asynchronous library implementers for a PSR on Promises. Those directly-impacted people have a clear “seat at the table”, and a vote in the Working Group itself before a PSR is approved, even if they’re not a member project. Moreover, the final vote cannot happen until there are at least two implementations in existence that demonstrate that a proposal is both viable and likely to be adopted by someone. This change is derived directly from IETF.

Third, the final vote on the spec, after the Working Group is done with it, is handled by an elected 12-person Core Committee. The Core Commitee’s job is to maintain consistency and excellence in all of FIG’s work, balancing both established patterns and forward-looking developments, and act as semi-outside reviewers of the Working Group’s efforts. They may be project representatives or not; that opens up FIG participation even further to the many experts in PHP who are not project leads. Moreover, they are elected not just by project representatives but by anyone who has been actively involved in FIG; that includes all Working Group members, who may or may not be project representatives.

The project representatives, then, need only be involved at select times for voting on the Core Committee and when their project is relevant to a Working Group, which they can then join. If not, then their silence or uninvolvement doesn’t impact quorum or otherwise hinder the development of a spec that’s irrelevant to them anyway.

The Secretary position continues essentially unchanged; The Core Committee and Secretaries are peers, equals handling different parts of FIG. The Secretaries keep the machinery working while the Core Committee provides both technical oversight for the Working Groups and an “outsider’s view” to a given spec.

That addresses, I believe, most of FIG’s structural challenges today while creating an environment in which the PHP community can work more efficiently and effectively to everyone’s benefit.

Too visionary?

Although the proposal early on met with broad approval, it has more recently met with some opposition. The primary objection is that it is “too far” from FIG’s original purpose, and it should either therefore be abandoned or used as the foundation for a new group, possibly with FIG itself shutting down in response. Paul Jones in particular has repeatedly declared that it is against the “founding vision” of FIG, which was exclusively to standardize existing practice for member projects only.

However, the “founding vision” of the PHP Standards Group, according to the moderator of the original meeting where it was founded, was for a closed group without public involvement. At the same time, influencing new, not-yet-created, not-member projects was clearly a goal:

I would love it if the first comment on blog posts or mailing list messages announcing the new code is “wow, that’s great, but you should run it through phpcs.”

The first non-test post to the list, from David Coallier, stated unambiguously:

Each project may have specific standards which may extend and further define how these standards should be used, but the goal being a set of PHP standards provided as a resource for all PHP developers.

(emphasis added) and

A central, moderated mailing list to discuss PHP coding standards was proposed, to be hosted on lists.php.net. The list shall have public archives and unmoderated posting privileges will be granted by election by those with posting privileges. Each major project may have more than one member, but each project shall have only 1 vote towards standards decisions and membership.

(emphasis added).

It was only after the backlash, on the original php-standards list and elsewhere that the party line shifted to be “just for us”. However, if we want to look for the founder’s vision, there it is: A closed list creating standards “as a resource for all PHP developers.” And nowhere in those statements is there a claim to only standardize “what has already been done”.

The closed list idea was abandoned very early. The “just for us” line was mostly a defense against the (valid) accusations of over-reach. And no mention whatsoever of being only backward-looking.

Clearly to claim the vision of “the founders” was strictly a backward-looking, for-us-only organization is revisionist history.

A new group?

A number of people have proposed that the FIG 3 changes should not be adopted by FIG, but by a newly-created organization instead. The argument goes that FIG’s job is done, and a new group would be able to proceed without any of the karma that FIG has accrued, good or bad. That too, I feel, is an odd argument to make.

Today, FIG has no mission statement. So how can it be declared “done”? There’s no acceptance criteria defined! The closest we have is an entry in the FAQ on the website, which states FIG exists to “talk about the commonalities between our projects and find ways we can work together”. Given the number of PSRs in some stage of development right now, there still seems to be plenty to talk about.

Any good karma that FIG has built up over the past 7 years is not the property of a select few. It is the result of the blood and sweat of everyone that has worked on any spec that had been adopted and is in use, both project reps and not, everyone that has talked up FIG at conferences or in their projects, and everyone whose developer lives have been made better by FIG’s work. Most of those people were not founders of the group. In fact, most of the original founders stopped being active in FIG long ago.

Conversely, any bad karma that FIG has built up won’t magically go away by using a different name for a new group. If it’s obviously a continuation of FIG (which to anyone who cares it would be), few FIG detractors are going to suddenly reset their opposition to it. And those whose issue isn’t with FIG but with select members of FIG would only care whether or not those individuals are involved.

Could a new organization work? As long as FIG itself shut down and publicly stated that the new organization was its successor, it probably could. That seems an excessive amount of rigamarole and politics just to protect a fictional “vision”, however.

The worst case scenario would be for a new group to form yet FIG not shut down. Then PHP would end up with two competing standards bodies, which rather defeats the purpose of having a standards body.

Conclusion

FIG has had a tumultuous history, to be sure. However, is history has a very clear trajectory: toward more community participation and toward a more robust structure to support such participation. Its founding as “the PHP Standards Group” included publicly stated goals of being of use to the entire PHP community. In practice, it cannot be otherwise; PHP projects are no longer islands, so standards adopted by many projects eventually have an impact on almost all projects. The entire concept of interoperability cannot succeed if only member project “cool kids” adopt them.

FIG 3 is the next step in that evolution, and an important one. FIG has, over the last 7 years, earned a place as the de facto PHP Standards Group. It’s time for FIG to embrace that reality and help build a better PHP ecosystem for all.

Frequently Asked Questions about PHP-FIG

What is PHP-FIG and why is it important?

PHP-FIG, short for PHP Framework Interoperability Group, is a group that aims to standardize and streamline the way PHP developers write code. It’s important because it promotes the use of common coding standards among different PHP frameworks, which makes it easier for developers to switch between different frameworks and libraries. This not only improves the efficiency of the development process but also enhances the overall quality of the code.

How does PHP-FIG impact the future of PHP?

PHP-FIG plays a significant role in shaping the future of PHP. By establishing standards and best practices, it ensures that PHP remains a robust, versatile, and efficient language for web development. It also fosters a sense of community among PHP developers, encouraging collaboration and knowledge sharing, which can lead to more innovative and effective solutions.

What are PSRs and why are they important?

PSRs, or PHP Standard Recommendations, are a set of coding standards proposed by the PHP-FIG. They cover various aspects of PHP programming, including coding style, autoloading, caching, and more. PSRs are important because they provide a consistent and predictable structure for PHP code, making it easier to read, understand, and maintain.

How can I implement PSRs in my PHP projects?

Implementing PSRs in your PHP projects involves following the guidelines and recommendations outlined in the PSR documents. This may include adhering to specific coding styles, using certain interfaces or classes, or structuring your code in a particular way. Many modern PHP frameworks and libraries already follow PSRs, so using these tools can also help you adhere to these standards.

What is the role of autoloading in PHP-FIG standards?

Autoloading is a feature in PHP that automatically loads classes and files when they are needed, without the need for explicit require or include statements. PHP-FIG has proposed several PSRs related to autoloading, which standardize how autoloading should be implemented in PHP projects. This makes it easier for developers to use and share code across different projects and frameworks.

How does PHP-FIG promote interoperability?

PHP-FIG promotes interoperability by establishing common standards and practices for PHP development. This means that code written according to PHP-FIG standards can be used with any framework or library that also follows these standards, regardless of their specific implementation details. This makes it easier for developers to reuse and share code, leading to more efficient and effective development processes.

How can I contribute to PHP-FIG?

Anyone can contribute to PHP-FIG by participating in discussions, proposing new PSRs, or helping to refine existing ones. You can get involved by joining the PHP-FIG mailing list, participating in the PHP-FIG forum, or contributing to the PHP-FIG GitHub repository.

What is the relationship between PHP-FIG and PHP frameworks?

PHP-FIG is not a framework itself, but it plays a crucial role in the PHP framework ecosystem. Many popular PHP frameworks, including Laravel, Symfony, and Zend, follow PHP-FIG standards. This means that code written for one framework can often be used with another, provided it adheres to the same PSRs.

How does PHP-FIG affect the quality of PHP code?

By promoting consistent coding standards and best practices, PHP-FIG helps to improve the quality of PHP code. Code that follows PHP-FIG standards is typically easier to read, understand, and maintain, which can lead to fewer bugs and more robust applications.

What is the future of PHP-FIG?

The future of PHP-FIG looks promising. With the continued support and participation of the PHP community, PHP-FIG will continue to evolve and adapt to the changing needs of PHP developers. This includes proposing new PSRs, refining existing ones, and promoting the use of standards in PHP development.

Larry GarfieldLarry Garfield
View Author

Larry Garfield is Director of Runtimes and Integrations at Platform.sh. He has been a core contributor on the Drupal project for more than a decade and led the effort for Drupal 8 to adopt more PHP-industry-standard practices and decoupled components. Previously, Larry ran the GoPHP 5 project in 1997 that broke the PHP 4 logjam. He's been the Drupal FIG representative since 2009. Larry holds a Batchelor's and Master's degree from DePaul University in Chicago.

BrunoSOOPHPPHPphp-figstandards
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week