Happy New Year!
By popular demand here is the PHP Look Back 2003. Just like last year I look back at the most interesting (and sometimes funny) happenings on the PHP mailinglist. I decided not to do any of the PEAR lists as I'm just not involved in that. If you want a look back on PEAR, feel free to bug the PEAR People; I'm sure they will be happy to write one too ;-). As a small disclaimer: This might not always be a totally objective look back, as this is not an official thing. For now, have fun; we start in January.
January: The new year started by a message by Wez to bring up the issue of switched by default to Zend Engine 2 for the HEAD branch (still 4.4 at that time). Not totally unexpected the idea of moving all extensions to PECL also came up but fortunately the thread was small enough. Only a day later on the 2nd the Netware dudes had some trouble with the whole PHP build process again. Nicos thinks he found a big bug, on which Sterling has to say 'Its about as much of a bug as passing filetype(null) isn't a bug.'. We'll hear more of this Nicos fellow later this year. The discussion on the CGI and CLI proposal continued and the result was that for Unix if both SAPIs are built only the CGI version would have been installed, and on Windows there would be a new 'cli/' subdirectory to contain the new php.exe CLI executable. On the 13th Mike Robinson was asking if it was possible to use both PHP 4 and PHP 5 in the same webserver. Although James was cooking a patch for it it is still not possible because for some reason Apache starts crashing. The current 'best' way of doing it is to put the primary version as the webserver module and the secondary as CGI version. Some confusion existed by misunderstanding that there would be no more point releases before PHP 5, but of course that was not the case. The first idea to release 4.3.1 was immediately around too. On the 15th Rasmus announced a request data filter, which is now available in the latest PHP 5 versions. This filter makes it possible to write custom extensions to enforce policies on the Evil User input. A week later the first person was asking when PHP 5 would be released about. Of course he got the standard answer back but it also made the php5-dev list to disband, still a shame if you ask me (and others).
February was pretty boring actually. Except for announcements on PHP and Mono, a new Date extension (Pierre where is it? :), and a new ext_skel script by Hartmurt the only 'slightly' interesting discussions were the hunt for system calls by Rasmus and a discussion on the addition of file_put_contents(). The release process for PHP 4.3.2 started too.
In March Sascha was still advocating the merging of fixes to the PHP_4 branch, but other people (like me) thought correctly that it would have been useles to do. We had some encounters with our friend Jumadi too. In the second week the first talk on SQLite bindings being added to the PHP distribution. Nobody really reacted on this though at that time, some people even wanted to put it in PECL ;-). Some good work on 64bit issues was done too by David Hill. At some point Jani got pissed at the huge amounts of crap that were posted to php-dev@ . Some of the developers agree, but others (of course) not. Although the description on our support page cleary says that it is not for 'developing WITH PHP' not really many people know this apparently. After a longish discussion we changed the name of the list to internals@ after finding out that the MySQL guys did the same. But it didn't really work :) In March the problems with namespaces began to be known too. Andrei implemented that our code parser also parses the embedded doc comments, after some problems this is now working fine in PHP 5. Sterling added a standard Exception class, Wez raised an issue with filedescriptors on Slowaris that should be fixed before 4.3.2 is released and Andrei posted an RFC on an reflection API for PHP 5.
April started with a discussion on how to release binary PECL modules through PEAR without having problems with untrusted modules and a nice one on Coding Standards; something that's highly valuable but almost never enforced which is a bad thing. An extra API function safe_emalloc was added to guard against integer overflows in allocating memory inside extensions. We also discovered that flex 2.5.31 doesn't really work with PHP at all.
In May Sascha posted a patch to eliminate the use of stdio and replaces it with a streams interface and put it life on php.net to test it. May also featured a flamewar on bundling XML which Sterling did on the 7th. Some sane people agreed with Edin that it should not be bundled, and definitely not as source. There were of course also a couple of stubborn people who want it bundled. Fortunately this the crap was removed again and the few PHP 5 betas we have work pretty fine without it and it didn't raise that much 'problems' by users. This shows that we can safely omit it from the distribution. People still kept asking about a release date for PHP 5 but the answer was again 'When it is ready'. Helly started a long thread on 'exceptions' instead of errors by determining if we were executing in a class scope or not. We stayed with the current way of doing things: errors. We were still doubting if the fd patch should go into 4.3.2. In the end it was reverted and queued for 4.3.3. Not everybody was pleased with this and some people even released their own unofficial 'gold' version.
'Broken' support for namespaces was finally removed in June; after some fuss it looks like it was the best option though. A new discussion on moving all extensions to PECL was started, but 1. PECL doesn't really work yet and 2. we still think PECL as Siberia. PHP 4.3.2RC1 was released on the 18th and at that same day Sterling posted a PHP 5 Beta TODO list. Rasmus raised the issue with the LGPL mbstring mess which should be fixed before we release (a beta of) PHP 5. Moriyoshi promised to fix this issue with some new code, which later also seemed to be LGPL :). Jumadi was back too. James started messing with the CVS repository which cause quite some problems for me and other developers, while non-developers thought it was a good idea. Although James claims he warned us before he never discussed anything what and when he was about to mess up the CVS again. Sascha came up with a plan on how to continue from that point. There were some hurdles that needed to be fixed, but I think almost nobody agreed with Sterling's 'I'm a very strong +1, so long as you are the one who implements this'. Rasmus also drew a nice diagram too ;-). We also removed our bundled libmysql in PHP 5, not only because of them changing libmysql to the viral GPL, but also because it's 'our policy' not to have any more bundled libs in our CVS. Instead we started bundling SQLite and didn't do what the PostGreSQL dudes really wanted: bundling the PostGreSQL library. At the end of the month PHP5 Beta 1 was released.
July started with a nice little discussion on one of John's 'stupid' ideas of using SQLite for sessions. Another question on when PHP 5 would be released, this time by one of the Novell porting guys who messed with our CVS before already.
Georg was tired of answering all the silly MySQL license questions, George nicely summerized what Sterling already replied to Georg: 'Just don't reply'. Andi wanted to start with PHP 5 Beta 2 and release it on August 11th, Marcus sent an updated TODO list to the mailinglist. I found a little bug with the shutdown order for PHP. Something that's still not addressed.
About a month later in August Lars Torben submitted a patch to add a new function called 'variable_exists()' to check if a variable exists or not, there was a lot of arguing for and against this function, the decision was not to add it. There was another feature request for user-defined super globals but just as before we did not add it. Later in the month we had a discussion of adapting Thies' and Sterling's Faster Harder Stronger patch. We also had a funny support question.
September started with a little post on suckyCaps and PHP not being case sensitive for function names. Wez was crowned as King of PECL to boost the momemtum for our new extension repository which still had some problems at that time. One of the things that we don't allow in PECL are extensions that wrap around GPL libraries or extensions that are GPL itself because of the viral nature of the GPL. At the end of the month we had a clown who wants to serialize DOM objects. We made it clear that he was wrong.
A discussion that started in September on the 'BC break' with array_merge() not allowing 'FALSE' being passed any more as argument continued in October. Jay pretty much describes why the arguments against the change are bogus. David proposes to add regex operators, a bit similar to Hartmut's proposal to add a callback to switch(); Rasmus' reply exactly described what most other people thought about it. Andi also released PHP 5 Beta 2 at the end of the month. Marko posted an email which describes a difference in Mac OSX' bind sources and headers which of course causes some troubles. Melvyn summarizes this mess with 'Apple devs have re-invented the wheel and made it square'. Ilia and others successfully argued against the inclusion of an mbstring patch to go into 4.3.4. Later it showed that it would have caused a major bug if it would have been included.
November started with the release of PHP 4.3.4. After that we started quarelling over a new array syntax in the form of square brackets. At the end the idea was succesfully shot down. Andi had the idea to release PHP 5 RC 1 but most other people didn't agree with this though. Instead we opted to release another Beta. We also added a E_STRICT error type to PHP 5 which is not part of E_ALL and is meant for 'purists (like Jani :)'.
FlameWar month (December) was busy. On the first day we discussed the inclusion of ext/tidy into the standard distribution. After some problems were fixed it was added. One day later we dropped support for Windows 95 and we started another sigh discussion on moving the standard methods and objects over to the suckyCaps way. I'm afraid that's what we'll be heading at; but not without a fight. Wez added a new build system for Windows, the OCI extension was put the PECL (but also still available in the normal distribution). Following this Wez posted a FUD buster on PECL. Later we had a huge thread on the fgetcsv() function and mbstring 'cruft' in there. __toString() magic was removed too, but extensions (such as SimpleXML) can still implement this behavior. Another major disucssion we had was about an optional parameter to set_error_handler() which acts like an additional mask for when the user defined error handler should be called. We also released as a birthday present for me. Jumadi was back too.
With this I conclude the look back on PHP's 2003. Next year will hopefully bring PHP 5 and lots of 'interesting' dicussions for the developers. Happy New Year and let's hope that: James doesn't mess up the CVS anymore; Jumadi and Nicos stay quiet; Andi and Wez don't move to the US; Andrei finally stays at one place; Edin has great success with his new company; Jani keeps killin' (bugs); Steph stays put to her education; Zeev doesn't need to travel that much; Ilia keeps fixing bugs and Marcus and Sebastian learn that OO isn't everything ;).