최근 dotnet/core GitHub Discussions #9285에서 언급된 2038년 문제(Year 2038 Problem, Y2038) 를 언급할 필요가 있을 것 같아 글을 올려봅니다.
(TL;DR) 32비트 ARM 프로세서를 사용하면서 Ubuntu 24.04보다 낮은 OS를 사용하는 환경에서 발생할 수 있는 문제로, 일부 IoT 하드웨어, 임베디드 디바이스에 국한된 문제입니다.
이 문제는 32비트 정수 기반의 time_t 타입을 사용하는 운영체제에서 2038년 1월 19일 이후의 시간을 올바르게 표현하지 못하는 데서 발생합니다. 시간이 오버플로우되면 SSL 인증 검증, 파일 시스템 처리, 네트워크 프로토콜 등 다양한 기능이 정상적으로 동작하지 않을 수 있습니다.
다만 이 문제는 일부 환경에만 국한되는 문제이며, 현재 대부분의 서버, 데스크톱, 모바일 기기는 x64나 ARM64 아키텍처를 기반으로 하고 있으며, 이미 64비트 시간 표현을 사용하기 때문에 2038년 문제의 영향을 받지 않습니다.
실제로 문제가 될 수 있는 환경은 일부 32비트 ARM 프로세서 기반 시스템이며, 특히 Ubuntu 24.04 미만의 배포판처럼 Y2038을 지원하지 않는 구형 glibc를 사용하는 경우가 해당됩니다. 따라서 일반적인 클라우드나 서버 환경에서는 걱정할 필요가 없지만, 장기간 운용되는 IoT 기기나 임베디드 장비를 다루는 경우에는 주의가 필요합니다.
.NET 런타임 측면에서 보면, .NET 8 및 그 이전 버전은 Arm32 환경에서 Y2038 비호환 OS를 그대로 사용할 경우 SSL 인증서 검증 오류(NotTimeValid) 같은 문제가 발생할 수 있습니다. 반면 .NET 9부터는 Y2038 호환 OS만 Arm32 대상으로 지원하도록 정책이 바뀌었고, 곧 출시될 .NET 10.0 LTS는 장기 지원 버전으로서 이러한 환경에서도 안정적으로 동작할 수 있습니다.