]>
&header;

2000 年問題 (別名、「千年紀のバグ」) に対する経営側の理解が深まるにつれ、 より多くの企業から、ハードウェアやソフトウェアのベンダに対して、 彼らの製品は 2000 年におこる転覆にどのように対処するのか、 公的な所信表明を要求する声が出てきています。

&unix; や FreeBSD のような Unix ライクな OS を使用している団体は、 既にその問題の一歩先を歩んでいます。FreeBSD は 2000 年が過ぎてだいぶたった後でも、正しく時間を維持することができるでしょう。

## 予備知識

(この節は Linux Y2K compliance page の文章に基づいたものです)

すべての Unix と Unix ライクなオペレーティングシステムと同じように、 FreeBSD における時間と日付は、内部的には、 1970 年 1 月 1 日 (Unix の「紀元年」) からの秒数で表現されています。 現在のところ、この秒数は 32 bit 長の整数として格納されており、 2038 年とちょっとまで行ったところで使い果たされる計算になります。 おそらく、その頃には、 この宇宙の終わるときまで役に立つ、64 bit 長の (あるいはそれ以上の長さの) カウンタを使用しているでしょう。

2000 年問題に対応済の OS を使用したとしても、2000 年問題に対応していないアプリケーションが正しく 動作するわけではありません。注意してください。

また、OS が現在の日時や日付をコンピュータの CMOS クロックから読み込んでいることにも注意してください。 それらのデバイスすべてが 2000 年を正しく扱えるわけではありません。 ハードウェアクロックが 1999 年から 2000 年へ正しく移行できること、 そして 2000 年を正しくうるう年として扱えることを、 各プラットフォームで個別に確かめた方が良いでしょう。

## あなたにできること

FreeBSD は次の世紀に入っても、 正しく時間を維持し続けることができるでしょう。しかし、 サードパーティ製のアプリケーションはそうでないかもしれません。 2000 年問題に対しては、攻撃は最大の防御と言えます。 おなじみの来るべき世界の終わりについての物語にただ耳をすましているだけでは、 千年紀のバグを解決することはできません。 ただその時が来るのを待っていても同じことです。 FreeBSD プロジェクトは、みなさんの組織が、来たる千年紀に向け しっかりしたシステム管理の原則を適用することをお勧めします。

## FreeBSD 2000 年問題所信表明

> 「広範囲にわたる分析と試験の結果、我々は FreeBSD は 100% 2000 年に適合していると信じるに至りました。 不幸にも何かが見落とされていた場合でも、 我々は問題を可能な限りすみやかに解決できるようにベストを尽くします。」

> David Greenman
> Principal Architect, The FreeBSD project

## 修正済の問題

FreeBSD 上では、以下の 2000 年問題は既に発見され、修正されています。

misc/1380
  yacc, ftpd, make などの複数のプログラムが、年の表示として 19%d (訳注: C の書式指定文字列を使って、1900 年代であると決め打ちしている) を返すようにハードコードされていました。 [修正済: yacc v1.2 1999/01/18; ftpd v1.7 1996/08/05; make v1.4 1996/10/06; FreeBSD-2.2 以降で修正済]
conf/1382
  /etc/rc.local 内部の、``message of the day'' のためにホスト / カーネル ID をビルドする sed スクリプトは、 年が 1999 以降にならないことに依存していました。 [修正済 v1.21 1996/10/24; FreeBSD-2.2 以降で修正済]
misc/3465
  /etc/namedb/make-localhost コマンドは、DNS のシリアル番号を YYMMDD の形式で生成しています。2000 年には、 この番号は 1YYMMDD の形式で生成されるでしょう。 [修正済 v1.2 1997/08/11; FreeBSD-2.2.5 以降で修正済]
gnu/4930 and gnu/8321
  groff の tmac マクロは、ある種の日付を自動的に 1900 年代だと解釈するようにハードコードされていました。 [修正済: tmac.e v1.3 1998/12/06; doc-common v1.10 1999/01/19; FreeBSD-3.1 以降で修正済]
bin/9323
  touch は、旧形式で日付を与えた場合、2 桁の年指定を正しく 扱えません。00 から 68 までの年指定は、2000 から 2068 ではなく 1900 から 1968 と解釈されます。 [修正済 v1.7 1999/01/05; FreeBSD-3.1 以降で修正済]
xntpd/parse/util/dcfd.c
  UNIX における紀元の扱いが間違っているために、うるう年の日数の計算、 DCF77 形式の時間の変換が正しく行われません。このエラーは、2000 年だけではなく、どの年でも問題となるものでした。 [修正済 v1.6 1999/01/12; FreeBSD-3.1 以降で修正済]
tar/getdate.y
  Conver() 関数が 70-99 の 2 桁の年を扱うようにハードコード されていました。現在 2 桁の年数を 1970-2069 まで扱えるように 変更されました。ただ、世紀を越える年がうるう年でない場合を サポートしていません。 [修正済 v1.4 1999/01/12; FreeBSD-3.1 以降で修正済]
fetch/http.c
  HTTP プロトコルは年度を 2 桁で表す旧形式の日付フォーマットを 含んでいます。以前のバージョンの fetch は、そのような 2 桁の年度を、 すべて 1900 年代と解釈していました。このバージョン以降は RFC 2068 の記述に従い、2 桁の年度は、50 年以上先の場合を除き、その世紀の 年度として扱われるようになりました。旧形式の日付フォーマットを使用する HTTP サーバは、だんだん使われなくなっているため、この不具合が深刻な 問題を引き起こすとはないでしょう。 [修正済 v1.24 1999/01/15; FreeBSD-3.1 以降で修正済]
misc/9500
  CVSROOT ディレクトリにある `edithook' スクリプトは生の tm_year を 使用しているので、2000 年 1 月 1 日 を 01/01/100 と表示するでしょう。 [修正済 v1.2 1999/01/17; FreeBSD のリリースには関係なし]
bin/9501
  いくつかの cvs 配布ファイルは 2000 年に適合していません。 log.pl と sccs2rcs.csh スクリプトは年度に `19' をつけ加え、 その結果 2000 年を 19100 年と表示します。log_accum.pl スクリプトは、あるところでは 2 桁の年度を使い、別のところでは tm_year が 1900 年からの年数を表すものではなく、むしろ今世紀の 年度を表すものであると仮定しています。 [修正済: log.pl v1.2 1999/01/15; sccs2rcs.csh v1.3 1999/01/15; FreeBSD-3.1 以降で修正済]
bin/9502
  groff のナンバーレジスタ `yr' は、 (struct tm).tm_year から割り当て られているので、今世紀の年度を表しているのではなく、1900年からの年数を 表示します (troff/inpuut.cc 内の定義を見てください)。 [修正済 mod 100 にセットされています、troff/input.cc V1.2 1999/06/03; FreeBSD-3.3 で修正済]
bin/9503
  PicoBSD の simple_httpd は生の tm_year を使用しているので、 2000 年 1 月 1 日を 01/01/100 と表示するでしょう。 [修正済 v1.2 1999/01/16; FreeBSD-3.1 以降で修正済]
bin/9505
  adduser は生の tm_year を使用しているので、2000 年 1 月 1 日を 01/01/100 と表示するでしょう。 [修正済 v1.42 1999/01/15; FreeBSD-3.1 以降で修正済]
bin/9506
  cron は生の tm_year を使用しているので、2000 年を 100 と表示するでしょう。 [修正済 v1.7 1999/01/16; FreeBSD-3.1 以降で修正済]
bin/9507
  tcpslice(8) は生の tm_year を使用しているので、2000 年 1 月 1 日を 100y01m01d... と表示するでしょう。互換性のために、2000年までは 2 桁の 年度を使用します。 [修正済 v1.8 1999/01/20; FreeBSD-3.1 以降で修正済]
bin/14472
  date コマンドは千年/百年の桁を指定できません。 [修正済 v1.31 1999/11/10]
misc/14511
  chpass は有効期限の年に 00 を指定した場合の処理に問題があります。
bin/15852、 gnu/16045、 bin/16207
  \*(DT [\*(td] 文字列を定義してある Groff には 2000 年問題があります。 [v1.15 の import により修正済 2000/01/12]
bin/15872
  at(1) には、tm_year が 100 の場合、有効な時間指定が `不正な時刻' という報告を返すという問題があります。
misc/16238
  KerberosIV のインストールがきちんと動作しません。 これは、チケット認証期限が 12/31/99 というように、 ハードコーディングされた部分がソースプログラム中にあるためです。 [修正済 v1.24 1999/09/19]

## 更なる情報

FreeBSD の 2000 年対応について更なる質問をお持ちであるか、 FreeBSD 下で走る 2000 年対応済でないアプリケーションを発見した場合、 freebsd-bugs@FreeBSD.ORG まで連絡してください。

&footer;