[Java-Apache Project]

Java-Apache Project
Y2K Compliance and Safety

Every organization serious about avoiding Year 2000 (Y2K) crashes and errors is checking each piece of software in use as we near the turn of the century. The Apache JServ servlet engine is Y2K complaint/safe.

However, there are dependencies on other associated software. And various software out there have more kinds of "date rollover" bugs than just January 1, 2000. This document will provide an overview.

Note that these clock rollover bugs also occur before the actual time arrives, when any forward-referencing time is used, such as an expiration date.

Y2K Dependencies on Other Software

The Y2K compliance status of a system that includes the Apache JServ servlet engine will also depend on the following factors:
HTTP Server Software
The Apache JServ servlet engine receives requests from a web (HTTP) server. Most of those servers are Apache HTTPD, which has its Y2K compliance statement as part of the Apache FAQ. In short, the Apache HTTPD distribution is Y2K safe with dependencies on the operating system.

Development versions of the Apache JServ now also serve NSAPI-compatible (Netscape servers) and ISAPI-compatible (Microsoft, O'Reilly and other servers) web servers. If you're using one of those, you will need to check with your web server's developer for further details.

Java Virtual Machine
The Apache JServ is written in Java. Therefore, the Java Virtual Machine (JVM) which executes the Java bytecodes provides the system environment, including timekeeping. The reference implementation of the Java standard is from JavaSoft. Their JVM implements timekeeping in a way specific to each operating system that the JVM runs on. Therefore, the JavaSoft JVM, and any implemented similarly, are Y2K safe with dependencies on the operating system, just like the Apache HTTPD is.
Operating System
Unix and Windows operating systems keep their time by integer quantities of seconds since an initial "epoch". These are Y2K safe but will have other clock rollover problems years further in the future. For other operating systems, you will need to check with the developer.
Servlets
Java Servlets are all late 90's technology so there should not be widespread ignorance of Y2K issues as there is with software written decades ago. However, each servlet has its own author and mistakes are possible. So for mission-critical operations, you should contact the servlet's author or refer to the source code if you have it. If your organization is so short on resources that some Y2K tasks can't be done, it's probably safe to give a low priority to investigation of new software like servlets since they're not likely sources of Y2K bugs.

Categories of Clock Rollover Bugs

When making sure your servlets and system software will behave correctly, there are several clock rollover bugs that need to be considered, not just January 1, 2000.
GPS "End of Week" Bug
August 22, 1999
Any servlet or computer which uses timekeeping or position information from a Global Positioning System (GPS) receiver needs to check if the receiver is vulnerable to the GPS "End of Week" (EOW) bug. Among the data structures used to keep time, a 10-bit quantity was used for the number of weeks since January 1980. This allows for 1024 weeks and will roll over on August 22, 1999 (and every 1024 weeks, or 19-3/4 years thereafter.) Check with your GPS receiver manufacturer - some newer ones keep track of their date of manufacture and use that to avoid rolling over to a date before they were made. Others will roll back to 1980, resulting in incorrect time, position and navigation information.

Fiscal Year 2000 Rollover
various dates between April 1, 1999 and January 1, 2000
Organizations with fiscal years offset from the calendar year will hit the Year 2000 "Millenium Bug" when their FY2000 begins. For example, the Federal Government rolls over to FY2000 in October 1999. For businesses, governments and any entity that uses accounting software, the Fiscal Year 2000 may appear as FY1900 if the year is stored as a two-digit quantity and the century is assumed to be 1900. These bugs will occur when each organization reaches its Fiscal Year 2000, which means many of them will be occurring at different places most commonly on calendar quarter boundaries starting April 1, 1999, and it won't be an April Fools joke!

The "Millennium Bug"
January 1, 2000
This is the well-known bug where any date where the year is kept as as two-decimal-digit quantity will roll over to 1900. This is dealt with in detail by many Y2K sites around the web.

In any new software you write, care must be taken to avoid introducing new Y2K bugs while so many people around the world are trying to fix them! Do not use 2-digit years in any data, or in any output that could conceivably be used as input by another program, local or remote. Just to be safe, you should even use 4-digit years when printing them for user display.

The 2000 Leap Year Bug
February 29, 2000
Many programs compute their own dates from internal data structures. Cases have been found where they fail to identify 2000 as a leap year, because years divisible by 100 are not leap years unless they're also divisible by 400. 1800 and 1900 were not leap years but 2000 will be. Most Unix systems will handle this correctly and it's easy to test by setting a test system's date to the Leap Day, February 29, 2000. Systems which fail to recognize this will be a day off on all days past the Leap Day in 2000.

Operating Systems that coordinate their timekeeping libraries with the US Naval Observatory will be the most accurate, even including leap seconds each year after they're announced. Such operating systems that include updated timekeeping libraries with each new release are Linux and FreeBSD.

Win32 Application Rollover
The Y2K FAQ indicates that Windows 95 and NT operating system clocks can handle up to 2099 but some applications may use dates after 2000 or 2020 to turn the system clock back to 1900 or 1920, respectively.

Unix 2038 Bug
January 19, 2038
Unix clocks use a signed 32-bit integer quantity to represent the number of seconds since January 1, 1970 at midnight GMT. The 2.1 billion seconds covered by this algorithm will run out in the year 2038. Some time before then, Unix systems and applications will need to migrate to a 48-bit or 64-bit clock. This should not be a concern right now when actual Year 2000 issues in many organizations do not have enough resources to all be solved in time.

The original Unix developers at Bell Labs in the late 1960's and early 1970's used this number because they had no way to know how popular Unix would become. So they just chose a time scale that would outlast their own lifetimes.

Y2K and Clock-Rollover Bug Links


Back to the Java-Apache Project Documentation Index