253 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			253 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" [
 | |
| <!ENTITY date "$FreeBSD: www/en/y2kbug.sgml,v 1.43 2002/03/16 08:19:25 murray Exp $">
 | |
| <!ENTITY title 'Year 2000 Compatibility (aka "Millennium Bug")'>
 | |
| <!ENTITY % includes SYSTEM "includes.sgml"> %includes;
 | |
| ]>
 | |
| 
 | |
| <html>
 | |
|     &header;
 | |
|     
 | |
|     <p>As management understanding of the Year 2000 problem (aka, "The
 | |
|       Millennium Bug") increases, more and more companies are demanding
 | |
|       official statements from the vendors of their hardware and software as
 | |
|       to how their product will handle the year 2000 date rollover.</p>
 | |
| 
 | |
|     <p>Organizations that use &unix; and Unix-like operating systems such as
 | |
|       FreeBSD are already one step ahead of the problem.  FreeBSD will
 | |
|       properly maintain time long after year 2000 passes.</p>
 | |
| 
 | |
|     <h2>Background information</h2>
 | |
|     
 | |
|     <p><i>(This section based on the text from the <a
 | |
| 	  href="http://www.linux.org.uk/mbug.html">Linux Y2K compliance
 | |
| 	  page</a>)</i></p>
 | |
|     
 | |
|     <p>As with all Unix and Unix-like operating systems, time and dates in
 | |
|       FreeBSD are represented internally as the number of seconds since the
 | |
|       1st of January 1970 (the Unix "epoch").  Currently, that figure is
 | |
|       stored as a 32 bit integer, and will run out part way through 2038. By
 | |
|       then we should (hopefully) be using a counter of 64 bits (or greater)
 | |
|       which should be good until the end of the universe.</p>
 | |
| 
 | |
|     <p>Note that the OS being Y2K compliant will not fix errant applications
 | |
|       that are not Y2K compliant.</p>
 | |
| 
 | |
|     <p>Note also that the OS expects to read the current date and time from
 | |
|       the CMOS clock of your computer.  Not all of these devices correctly
 | |
|       handle the year 2000.  You are advised to test each platform
 | |
|       individually to ensure that your hardware clock behaves correctly when
 | |
|       going from 1999 to 2000, and that it correctly interprets the year 2000
 | |
|       as a leap year.</p>
 | |
| 
 | |
|     <h2>What you can do</h2>
 | |
| 
 | |
|     <p>FreeBSD will continue to properly maintain time well into the next
 | |
|       century.  Third party applications, however, might not.  Your best
 | |
|       defense against year 2000 issues is a good offense.  Listening to
 | |
|       stories claiming the coming meltdown of the world as we know it are
 | |
|       <strong>not</strong> the way to solve the millennium bug.  Nor is
 | |
|       waiting until the last minute.  The FreeBSD Project recommends that your
 | |
|       organization apply sound system administration principles as the
 | |
|       millennium approaches.</p>
 | |
| 
 | |
|     <h2>FreeBSD Year 2000 Statement</h2>
 | |
|     
 | |
|     <blockquote>
 | |
|       <p>"After extensive analysis and testing, we believe that FreeBSD is
 | |
| 	100% Y2K compliant.  In the unlikely event that something has been
 | |
| 	overlooked, we will do our best to fix it as soon as possible."</p>
 | |
|       
 | |
|       <p align="right">David Greenman<br>Principal Architect, The FreeBSD
 | |
| 	project</p>
 | |
|     </blockquote>
 | |
| 
 | |
|     <h2>Fixed problems</h2>
 | |
|     
 | |
|     <p>The following Y2K problems have been identified and fixed in
 | |
|       FreeBSD.</p>
 | |
|     
 | |
|     <dl>
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=1380">misc/1380</a></dt>
 | |
|       
 | |
|       <dd>Several programs have a hardcoded 19%d in responses for the year.
 | |
| 	Affected programs include: yacc, ftpd, and make.  [Fixed: yacc v1.2
 | |
| 	1999/01/18; ftpd v1.7 1996/08/05; make v1.4 1996/10/06; fixes in
 | |
| 	FreeBSD-2.2 and above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=1382">conf/1382</a></dt>
 | |
|       
 | |
|       <dd>The sed script in /etc/rc.local that builds the host/kernel ID line
 | |
| 	for the message of the day relies on the year not going past 1999.
 | |
| 	[Fixed v1.21 1996/10/24; fixes in FreeBSD-2.2 and above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=3465">misc/3465</a></dt>
 | |
|       
 | |
|       <dd>The etc/namedb/make-localhost command generates the DNS serial
 | |
| 	number as YYMMDD. In the year 2000, this will be generated as
 | |
| 	1YYMMDD.  [Fixed v1.2 1997/08/11; fixes in FreeBSD-2.2.5 and
 | |
| 	above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=4930">gnu/4930</a> and
 | |
| 	  <a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=8321">gnu/8321</a></dt>
 | |
|       
 | |
|       <dd>groff tmac macros have hardcoded 19 for generating some dates.
 | |
| 	[Fixed: tmac.e v1.3 1998/12/06; doc-common v1.10 1999/01/19; fixes in
 | |
| 	FreeBSD-3.1 and above]</dd>
 | |
| 
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9323">bin/9323</a></dt>
 | |
|       
 | |
|       <dd>In its obsolescent form, touch doesn't treat the two digit year
 | |
|         specification correctly.  Years in the range 00-68 are treated
 | |
|         as 1900-1968 instead of 2000-2068.  [Fixed v1.7 1999/01/05; fixes in
 | |
|         FreeBSD-3.1 and above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://cvsweb.FreeBSD.org/src/usr.sbin/xntpd/parse/util/dcfd.c">xntpd/parse/util/dcfd.c</a></dt>
 | |
|       
 | |
|       <dd>The leap year calculations for the number of days in a year, and the
 | |
| 	conversion of DCF77 time to seconds since the Epoch were wrong.  These
 | |
| 	errors affected all years.  [Fixed v1.6 1999/01/12; fixes in
 | |
| 	FreeBSD-3.1 and above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://cvsweb.FreeBSD.org/src/gnu/usr.bin/tar/getdate.y">tar/getdate.y</a></dt>
 | |
|       
 | |
|       <dd>Function Convert() was hard-coded for two digit years in range 70-99.
 | |
| 	Now adjusted to allow two digit years for 1970-2069.  The function
 | |
| 	does not allow for century non-leap years - y2k1 alert!  [Fixed v1.4
 | |
| 	1999/01/12; fixes in FreeBSD-3.1 and above]
 | |
|       </dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://cvsweb.FreeBSD.org/src/usr.bin/fetch/http.c">fetch/http.c</a></dt>
 | |
|       
 | |
|       <dd>The HTTP protocol includes an obsolete date format which uses a
 | |
| 	two-digit year.  Previous versions of fetch would interpret all such
 | |
| 	dates in the 1900s; subsequent to this revision, the pivot described
 | |
| 	in <a href="ftp://ftp.cdrom.com/pub/internet/rfc/rfc2068.txt">RFC
 | |
| 	  2068</a> is employed, which causes two-digit years to be interpreted
 | |
| 	as always belonging to the current century unless they would be 50 or
 | |
| 	more years in the future.  Since the HTTP servers which use this
 | |
| 	obsolete format are no longer widespread, this is not expected to have
 | |
| 	a significant impact.  [Fixed v1.24 1999/01/15; fixes in FreeBSD-3.1
 | |
| 	and above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9500">misc/9500</a></dt>
 | |
|       
 | |
|       <dd>The `edithook' script in the CVSROOT directory uses a raw tm_year
 | |
| 	and will therefore display 01/01/100 for 2000-JAN-01.  [Fixed v1.2
 | |
| 	1999/01/17; not relevant to FreeBSD releases]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9501">bin/9501</a></dt>
 | |
|       
 | |
|       <dd>Several cvs contrib files are not Y2K compliant.  The log.pl and
 | |
| 	sccs2rcs.csh scripts prepend `19' to the year resulting in a display
 | |
| 	of 19100 for 2000.  The log_accum.pl script uses a two digit year in
 | |
| 	one place and in another place assumes that the tm_year is year within
 | |
| 	century rather than years since 1900.  [Fixed: log.pl v1.2 1999/01/15;
 | |
| 	sccs2rcs.csh v1.3 1999/01/15; fixes in FreeBSD-3.1 and above]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9502">bin/9502</a></dt>
 | |
|       <dd>The groff number register `yr' is assigned from a (struct
 | |
| 	tm).tm_year and therefore represents the number of years since 1900,
 | |
| 	not the year within the century (see definition in troff/input.cc).
 | |
| 	[Fixed, now set mod 100, troff/input.cc V1.2 1999/06/03; fixed
 | |
| 	in FreeBSD-3.3]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9503">bin/9503</a></dt>
 | |
|       
 | |
|       <dd>PicoBSD's simple_httpd uses a raw tm_year and will therefore display
 | |
| 	01/01/100 for 2000-JAN-01.  [Fixed v1.2 1999/01/16; fixes in
 | |
| 	FreeBSD-3.1 and above]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9505">bin/9505</a></dt>
 | |
|       
 | |
|       <dd>Adduser uses a raw tm_year and will therefore display 100/01/01 for
 | |
| 	2000-JAN-01.  [Fixed v1.42 1999/01/15; fixes in FreeBSD-3.1 and
 | |
| 	above]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9506">bin/9506</a></dt>
 | |
|       
 | |
|       <dd>Cron uses a raw tm_year and will therefore display 100 for 2000.
 | |
| 	[Fixed v1.7 1999/01/16; fixes in FreeBSD-3.1 and above]</dd>
 | |
| 	
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9507">bin/9507</a></dt>
 | |
|       
 | |
|       <dd>tcpslice(8) uses a raw tm_year and will therefore display
 | |
| 	100y01m01d... for 2000-JAN-01.  For compatibility, use a two-digit
 | |
| 	year until 2000.[Fixed v1.8 1999/01/20; fixes in FreeBSD-3.1 and
 | |
| 	above]</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=14472">bin/14472</a></dt>
 | |
|       
 | |
|       <dd>Date command does not take thousand/hundred digits. [Fixed v1.31 1999/11/10]
 | |
| 	</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=14511">misc/14511</a></dt>
 | |
|       
 | |
|       <dd>Chpass has a problem using 00 for expiration year.
 | |
| 	</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=15852">bin/15852</a> and
 | |
| 	  <a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=16045">gnu/16045</a> and
 | |
| 	  <a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=16207">bin/16207</a>
 | |
| 	  </dt>
 | |
|       
 | |
|       <dd>Groff predefined \*(DT [\*(td] string has Y2K bug. [Fixed with import of
 | |
|         version 1.15 2000/01/12]
 | |
| 	</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=15872">bin/15872</a></dt>
 | |
|       
 | |
|       <dd>at(1) has a problem with valid time specifications if tm_year is 100,
 | |
|         reports `garbled time'.
 | |
| 	</dd>
 | |
| 
 | |
|       <dt><a
 | |
| 	  href="http://www.FreeBSD.org/cgi/query-pr.cgi?pr=16238">misc/16238</a></dt>
 | |
|       
 | |
|       <dd>KerberosIV install does not work properly because there is a hard-wired
 | |
| 	expiration date of 12/31/99 in the Kerberos source for the ticket
 | |
| 	granter. [Fixed v1.24 1999/09/19]
 | |
| 	</dd>
 | |
|     </dl>
 | |
|     
 | |
|     <h2>More information</h2>
 | |
|     
 | |
|     <p>If you have further questions about FreeBSD's year 2000 compliance, or
 | |
|       you have discovered an application running under FreeBSD that is not Y2K 
 | |
|       compliant, please contact the project at <a
 | |
| 	href="mailto:freebsd-bugs@FreeBSD.ORG">freebsd-bugs@FreeBSD.ORG</a>.</p>
 | |
| 
 | |
|       &footer;
 | |
|   </body>
 | |
| </html>
 | |
| 
 | |
| <!-- 
 | |
|      Local Variables:
 | |
|      mode: sgml
 | |
|      sgml-indent-data: t
 | |
|      sgml-omittag: nil
 | |
|      sgml-always-quote-attributes: t
 | |
|      End:
 | |
| -->
 |