| « ホワイトリストはどう作る? | OpenIDのライブラリにはCSRFに脆弱な物が多い » |
企業ユーザはPHP4からPHP5への移行は慎重にすべき
2008年1月3日のPHP4.4.8のリリースを持ってPHP4サポートが終了しました。海外では「PHP5へ移行しよう」キャンペーンも始まりました。
私は従来から「PHP5へ早く移行すべきです」と繰り返し勧めて来ました。現在でも全てのオープンソースアプリケーションの開発者は、今すぐPHP5に移行すべき、と考えています。
しかし、新規開発を除き、企業ユーザには今すぐPHP5へ移行すべきだ、と一概にアドバイスできません。3つのお薦めしない理由があります。
- PHP4からPHP5へのマイグレーションはそれほど簡単ではない
- PHP5に移行するとマイナーバージョンアップに追随しないとならない
- PHP5.3のリリースが準備されている
Follow up:
PHP4からPHP5へのマイグレーションはそれほど簡単ではない
PHP4からPHP5への移行でチェックしなければならない箇所はいろいろな所で書かれていると思います。私もPHP4からPHP5へのマイグレーションについて技術評論社のWebサイトにて執筆しています。この記事を読んでいただくとPHP4からPHP5への移行は割といろいろな事に注意しなれけばならない事が分かると思います。規模が大きなシステムや安定運用が必須のサービスでは移行の工数は大きな物になってしまいます。
PHP5に移行するとマイナーバージョンアップに追随しないとならない
PHPの開発チームはマイナーバージョンアップ版をリリースすると、以前のバージョンはアップグレードしていません。つまり新しいマイナーバージョンアップ版でセキュリティホールが修正されていても以前のマイナーバージョン用にセキュリティパッチを提供してきませんでした。
私はこのリリース方針はセキュリティ上非常に問題だと考えています。PHPのマイナーバージョンアップには非互換の変更が多く含まれている事が通常だからです。商用サービスを提供している企業は簡単にPHPのバージョンを上げる訳にはいきません。
PHP5.3のリリースが準備されている
PHPのCVSブランチでは次のPHP5リリースとなるPHP 5.3ブランチが昨年から設けられています。PHP 5.3はPHP6からUnicodeサポートを削除した物とほぼ同じ機能を持つリリースとなります。PHP 5.2からPHP 5.3へのバージョンアップはメジャーバージョンアップに近い、と言える機能追加が行われます。ネームスペースやICU機能のサポート等です。
今現在、PHP4からPHP5へ移行する場合、PHP 5.2へ移行するしか選択肢がありません。しかし、PHP 5.2へ移行した場合、近い将来PHP 5.3へ移行せざるを得なくなります。PHP 5.2からPHP 5.3への移行はメジャーバージョンアップ程度のバージョンアップであることを覚悟しなければなりません。幸いな事に、PHP 5.2は今までのバージョンと異なり、PHP 5.3リリース後もしばらくメンテナンスが継続される事が決まっています。ただし、どのくらいサポートするかは不明確です。
PHP 5.3に追加されるネームスペース、ICU等の機能はPHP6でもサポートされます。つまり、PHP 5.3アプリケーションはスムーズにPHP6に移行可能です。さらに重要な事はPHP 5.3は非常に長い期間サポートされる事が期待できるリリースである事です。よほどの事が無い限りPHP 5.4はリリースされないかも知れません。企業ユーザはオープンソースプロジェクトと異なりROIが重要です。全ての企業はPHP5への移行を見合わせるべき、とは言いませんが今直ぐにPHP5へ移行するのは効果的なIT投資でない企業も多いと思われます。
企業ユーザのオプション
ただでさえメンテナンス状態が悪かったPHP4を継続利用するのはセキュリティ上のリスクも大きいです。システム担当者もPHP4と使いつづけ万が一セキュリティインシデントが発生した場合「サポートが終了しているアプリケーションを何故使いつづけてきたのか?」と指摘されても困ります。何らかの対策を行わなければなりません。現在PHP4を利用しているユーザは、PHP5に移行するか、安全にPHP4を利用する方法を見当しなければなりません。
この様な状況となるのは昨年秋には分かっていました。ですから、SRA OSS Inc.はPHP4のセキュリティアップデートサポートを昨年発表しています。このサービスはPHP 4.4.8にもセキュリティパッチが必要と考えられる箇所にパッチとセキュリティ情報を提供するサービスになっています。実は先日リリースされたPHP 4.4.8用のパッチも既にあります。
# 私もこのサービス提供に関わっています。
# このため最新版のPHP 4.4.8用パッチがあることも
# 知っています。
今すぐPHP4からPHP5へのアップグレードを検討し、PHP 5.2にするのも有用な選択肢です。PHP 5.2には様々な新機能が追加されパフォーマンスが向上している部分も少なくありません。
しかし、PHP 5.3が実用レベルに達してからPHP5へアップグレードする方が高いROIが期待できる企業も少なくないでしょう。PHP 5.3へマイグレーションするのでは無く、ほぼスクラッチ&ビルドでPHP 5.3から開発するのも手法の一つです。このような企業はPHP 5.3への移行へのつなぎとして、信頼できる商用PHP4サポートを利用するも賢明な選択肢であると思います。
PHP 5.3のリリースノートを見て「こんなことならPHP 5.3のリリースまでPHP5への移行は待っていれば...」とならない為には、既存の企業PHP4ユーザはPHP5への移行は慎重に検討すべきです。
5 comments
・新プロジェクト
PHP4系でやる意味はもはや無し。PHP5.2.xスタート。
・現在PHP4.4.xで動いているプロジェクト
5.3.xのリリースを待って移行
かなぁと思ってるんですが、2点ほど不安なことが。
・PHP5.3.0の提供時期
なんか結構揉めてる印象でいつになるやら。
・何を持って「実用レベルに達してる」と言うか
毎回悩みます。
・SRAのサービスを使うにしても・・・
仕方ないとはいえ「可能であればバックポートした修正パッチを提供します。」と保険がかけてあって
じゃあ、不可能な場合はどうするの?と不安が。
うーんうーん。
>・新プロジェクト
> PHP4系でやる意味はもはや無し。PHP5.2.xスタート。
もちろん新規プロジェクトをPHP4で始めるのはナンセンスです。(本文に追加しました)
アプリケーションはそのままでPHP4からPHP5に移行するだけのユーザの場合、コストをかけてPHP5に今移行するより、アプリの改修時などのタイミングに合わせてPHP5に移行するのが最良だと思います。
開発会社としては「単純にPHP5に移行するだけではもったいない。もう少し予算を付けて新システムリリースできるよう新機能も追加し、拡張性や安全性向上の為にコードのリファクタリング等も盛り込みましょう」と提案する方が良いと思います。発注側にもメリットがある提案だと思います。
> かなぁと思ってるんですが、2点ほど不安なことが。
>・PHP5.3.0の提供時期
> なんか結構揉めてる印象でいつになるやら。
何時になるかは今の所だれも分からない、と思います。
PHP6 - Unicode = PHP 5.3
という構図ある以上、個人的には、少なくともPHP6のα版くらいはリリースされないとPHP 5.3のリリースは無いはず、と思っています。
となるとPHP6アルファ版は何時?と言う話になると思いますが、開発している方の気持ちは遅くとも年内だと思います。
実用になるのは2年くらいかかるかも知れないと考えていると安全かと思います。取り合えずその2年間はPHP4アプリはそのままにして、新規案件だけはPHP5.2で作っておく、のが妥当な選択かと思います。2年経ってもPHP4のままの物はPHP5へ移行するのが良いかと思います。
# 全てのユーザが取れる選択肢ではないですが
# 同じサーバでPHP4とPHP5を動かす方法には
# - CGI版(FCGIが好ましい)とモジュール版の両方を使う
# - ポートを変えて両方を動作させ、プロキシで透過的にアクセスさせる
# などがあります。こうすればサーバリソースも無駄になりません。
>・何を持って「実用レベルに達してる」と言うか
> 毎回悩みます。
少なくともPHP 5.3.1までは待つ方が良いかと思います。(本当はPHP 6.1がリリースされるまで待つの吉かと思っています... PHP 5.0の惨状をご存知の方は良く分かる話だと思います。PHP 6.1がリリースされてもPHP 5.3のままである可能性は非常に高いと思います。もちろん最新版がPHP 5.4になっている可能性も捨てきれませんが、PHP 5.3からPHP5.4への移行は比較的容易になるだろうと予想できます) やはり自分でテストしてみるのが一番だと思います。現状のPHP 5.2でも仮想ホストを利用している環境では、ini設定がおかしくなる問題があったりしますが、このような問題は実際の運用環境に近い状態で検証しないと分かりません。
# こういう事があるので企業ユーザはPHP4からPHP5への移行は
# 難しいですよね... オープンソースなら取り合えずリリース、バグ報告
# はユーザから、で良いのですけど。
>・SRAのサービスを使うにしても・・・
> 仕方ないとはいえ「可能であればバックポートした修正パッチを提供します。」と保険がかけてあって
> じゃあ、不可能な場合はどうするの?と不安が。
専用の攻撃コードをPHPスクリプトとして実行しなければならないような問題は別として、リモートコード実行ができるようなバグは何があっても修正パッチが出るはずです。
実はバックポートだけでない、パッチも既にあったりします。このあたりは今までのPHP4のサポートよりパッチが早くてより安全だと言えると思います。
>PHP 5.0の惨状をご存知の方は良く分かる話だと思います。
これは自らが踏みまくってるので何とも言えない・・・(苦笑
流石に5.3はあの時ほど酷くはならないかなぁとは思うものの
PHP4から移行しようと思うとやっぱりリスキーですね・・・。
(何よりシステムの移行をしたあと、問題がないことを証明するのが難しい)
>実はバックポートだけでない、パッチも既にあったりします。
>このあたりは今までのPHP4のサポートよりパッチが早くてより安全だと言えると思います。
なるほどー。
出来たらそういうことはもうちょっとアピールしてほしいなぁ、と感じます。
>PHP6 - Unicode = PHP 5.3
>という構図ある以上、個人的には、少なくともPHP6のα版くらいはリリースされないと
この間、Zendジャパンのセミナーにいってきたのですが、5.3にUnicodeが入るようです。
6のテスト版が5.3って感じかもですね。
少なくともPHP開発者の間でUnicodeサポートと言うと、ZendEngineのUnicodeサポートの事を意味します。
ZendEngineのUnicodeサポートはICUを使って実装されていますが、ICUの別の機能(ロケールやエンコーディング変換)などはZendEngineと関係ない部分もあります。これらの部分がPHP 5.3にもバックポートされる予定です。
ですから、UnicodeサポートがPHP 5.3に入る、と言う表現はあまり適切でないと思います。
PHP6のUnicodeサポート
- binaryの導入
- string型の場合、文字列がUnicodeとして扱われる
- 互換モードの提供
- string型がUnicode文字列の場合、モジュール関数が文字列をUnicode文字列として認識するように変更
(代表例がstrlen)
といったところが代表的な違いです。ZendEngineのバージョンが異なるので、当然ですがこれらはPHP 5.3では実装されません。