2038 년 문제 [폐쇄]


28

2038 년 문제 가 매우 문제가 될 가능성은 무엇입니까 ?


7
나는 이미 가스 수류탄과 생수를 비축하고 있습니다! : P
Kevin Cantu

답변:


17

일부 장기 암호화 인증서에서 2038 년이 지난 날짜를 처리해야하는 임베디드 Linux 시스템에서이 문제가 발생 했으므로이 가능성은 응용 프로그램 도메인에 따라 다릅니다.

대부분의 시스템은 2038 년 이전에 잘 준비되어 있어야하지만, 오늘 날짜를 미래까지 계산할 경우 문제가있을 수 있습니다.


좋은 것! 나는 그 예를 생각하지 않았다! PKI 표준은 인증서 내에서 시간 구문으로 무엇을 사용합니까? 나는 본 적이 없다!
geoffc

@geoffc, 사실 그것은 독점적 인 형식이며 내부 날짜 / 시간 구조를 가지고 있었으며 2038 년 이후의 날짜에 충분히 적합했지만 날짜 / 시간 변환에 GLIBC 함수를 사용했습니다. 올바르게 기억하면 mktime전화가 자동으로 실패했습니다.
Alex B

13

영향을받는 코드가 일반적으로 하위 수준 (CTIME)이므로 시간이 저 장된 장소를 파악하기가 더 어렵 기 때문에 이것이 1999/2000 년의 Y2K 문제보다 훨씬 더 심각한 문제라고 생각합니다.

문제를 더 복잡하게하기 위해 Y2K가 축축한 스 퀴브 인 것으로 인식되어 이벤트 시작시 문제에주의를 기울이기가 더 어려워집니다.

문화적 참조 :

Cory Doctorow는 오픈 라이센스 하에서 단편 스토리 커미셔닝 / 출판을위한 새로운 모델을 시도하고 있었고, 나는 그 중 하나를 2038 테마로 제안했습니다 .


당시 문제를 해결하고 있던 누군가라고 말하면 Y2K는 많은 작업과 계획 때문에 미리 울었습니다. 매체에서 과장된 모든 운명에 의해 축축한 지각 인식이 강화되었다. 2035 년부터 많은 계획과 작업이있을 것으로 예상되지만 운이 좋으면 미디어 공세를 놓칠 것입니다.
David Thornley

링크 마크를 응원합니다.
boehj

9

몇 년 전, 30 년 대출을 계산하는 모기지 프로그램과 같은 영역에서 이미 문제에 대한보고가있었습니다 : 2008 + 30 = 2038.


8

64 비트 OS는 궁극적으로 2037 문제와 관련이 없습니다. (CTIME은 2038보다 2037에 더 가깝습니다).

문제는 OS의 비트 심도가 아니라 OS가 시간을 어떻게 저장 하는가입니다. 또는 데이터베이스 열이 시간을 저장하도록 어떻게 선택합니까? 또는이 디렉토리 서비스 시간 구문 속성이 백엔드에 시간을 어떻게 저장합니까?

이것은 32 비트 시간 카운터를 사용하는 것이 매우 고유하고 일반적이기 때문에 사람들이 생각하는 것보다 훨씬 더 큰 문제입니다.

시간을 저장하는 각 인스턴스를 다시 방문하고 모든 API를 업데이트하고이를 사용하는 모든 도구도 업데이트해야합니다.

작성된 원시 데이터 대신 사람이 읽을 수있는 시간 형식을 통해 시간을 설정할 수있는 추상화 계층이 더 쉬워 지지만 단 한 가지 경우입니다.

나는 이것이 대부분의 사람들이 생각하는 것보다 훨씬 더 큰 거래가 될 것이라고 생각합니다.


1
내가 볼 수있는 가장 큰 문제는 파일 형식과 파일 시스템이지만 ext4의 날짜 범위는 2514이고 vfat는 2107입니다. 문제는 reiserfs (2038)에 있습니다.
Maciej Piechotka

ReiserFS에는 여전히 다른 문제가 있습니다. CTIME에서 사람들이 그 매장 시간을 생각하는 것보다 숨겨진 장소가 더 많다고 생각합니다. 대담하고 쉽고 유용한 시간 형식입니다. 물론 서명되지 않은 CTIME에는 2037 문제가 없습니다. 나는 그것이 2107 타임 스탬프 사례라고 생각합니다.
geoffc

1
Apple HFS를 생각하고 있습니다. FAT는 전혀 사용하지 않습니다 time_t. 연도, 월, 일을 하나의 16 비트 값으로 필드로 저장합니다. 하루는 5 비트, 월은 4, 연도는 7입니다. 2107은 1980 (FAT 토지에서 0 년) + 2 ^ 7-1입니다. 더 재미있게, FAT는 다른 16 비트 값으로 시간을 같은 방식으로 저장하지만 수학을 수행하면이 방법으로 시간을 저장하기 위해 17 비트가 필요하다는 것을 알 수 있습니다. FAT는 몇 초 동안 1 비트의 해상도를 떨어 뜨려이 문제를 해결합니다. FAT는 2 초 미만의 변화를 구별 할 수 없습니다. 아, 마이크로 소프트, 당신의 불필요한 비 호환성없이이 얼마나 지루한 세상일까요!
워렌 영

8

이것은 내 의견이지만이 문제는 32 비트 카운터 문제로 인한 것입니다. 오늘날 대부분의 OS는 64 비트 (최소 64 비트 컴퓨터에서)의 시간을 처리하도록 업데이트되므로 모든 OS 및 소프트웨어가 오래 준비 될 것이라고 생각합니다 2038 년 이전에 2020이라고 가정하겠습니다. 따라서 2038 년에 2020 년까지 소프트웨어를 계속 실행하는 경우에만 문제가있을 수 있습니다
. 거의 모든 경우에 문제가되지 않을 것입니다. 나는 희망.


Ubuntu 32 비트 버전을 시도했지만 2038 문제가 있지만 Ubuntu 64 비트 버전을 실행하면 2038 문제가 발생하지 않았습니다. 나는 다른 유닉스를 시도하지 않았습니다.
Jimmy Hedman

예, 대부분의 32 비트 버전에서는 64 비트 버전이 아니라 문제가 표시됩니다. 2038
radius

2
이것은 어리석은 가정입니다. 우리는 오늘날 세계에서 여전히 16 (및 8 비트) 마이크로 프로세서를 사용하고 있습니다. 앞으로 32 비트 마이크로 프로세서는 마법처럼 사라질 것입니까? 이것이 일반 사용자에게 영향을 미치지는 않지만 공정한 경우에는 여전히 문제가 될 수 있습니다.
Eli Frey

16 비트 및 8 비트 컴퓨터는 1. 날짜를 0으로 이동 (1970-01-01에서 2010-01-01로)-그러나 특정 API / ABI 규칙을 위반합니다. 2. 타이머 필드 확장 ( 경우에 따라 '전용'ABI 만 중단 될 수 있습니다).
Maciej Piechotka

1

그렇게 큰 문제는 아닙니다.

소프트웨어 및 하드웨어 공급 업체가 제품을 "Y2K 호환"으로 인증해야하는 최초의 Y2K 블리츠 기간 동안 (PC 연결의 네트워크 케이블은 Y2K 호환 인증됨을 기억합니다) 많은 회사가 모든 것에 대한 자세한 감사를 수행했습니다 앞으로 시계를 설정하고 테스트하여

당시 테스트 비용이 너무 높았 기 때문에 1/1/99 (일부 개발자는 99를 센티널로 사용했을 수 있음), 12/31/99, 1 / 1 /과 같은 여러 날짜로 거의 항상 테스트했습니다. 00, 2000 년의 도약, 1/19/38 등. 지루한 목록 은 여기 를 참조 하십시오 .

따라서 1999 년에 있었던 중요한 소프트웨어에는 아마도 2038 개의 버그가 없지만 그 이후로 무지한 프로그래머가 작성한 새로운 소프트웨어가있을 것이라고 생각합니다. 전체 Y2K debacle 프로그래머가 일반적으로 날짜 인코딩 문제에 대해 훨씬 더 많이 알게 된 이후 Y2K만큼 큰 영향을 미치지는 않을 것입니다.


이 문제는 UNIX time_t 유형이 32 비트이기 때문에 발생합니다.
유홍 바오

1

그때까지 계속 실행되는 32 비트 시스템은 문제가됩니다.


2
정확히 무엇이 문제가 되는지 더 명확하게하기 위해, 그것에 대처하는 방법을 좀 더 자세히 설명해 주시겠습니까?
Anthon

문제는 시간을 계산하는 데 사용되는 32 비트 정수에 있습니다. 시간은 1970 년 1 월 1 일 이후 경과 된 시간 (초)으로 측정됩니다. 예를 들어 하루가 지나면이 카운터는 86400이됩니다. 따라서 2038 년에는이 값이 유지 될 수있는 값보다 큰 값을 보유하므로이 값이 오버플로됩니다. 부호없는 32 비트 정수 타임 스탬프에 64 비트를 사용하는 64 비트 시스템은 292,277,026,596 (292 억 년) 인 12 월 4 일 15:30:08까지 작동 할 수 있으므로이 문제는 발생하지 않습니다.
Rahul Kadukar

0
#include <time.h>
#include <stdio.h>

int main() {
  time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
  printf("%d\n", sizeof(time_t));
}

9 대신 1이어야하지만 ctime은 더 큰 날짜를 처리하지 않습니다.

8 - Sun Jun 13 07:26:08 1141709097

내 시스템 (물론 64 비트) 시간은 백만 년 이상 지속될 수 있습니다. 해결책은 시스템을 64 비트로 업데이트하는 것입니다.

문제는 프로그램이 처리하지 못할 수 있다는 것입니다. 특히 오래되고, 재산이며 유지되지 않는 것. 개발자는 다음 사실에 익숙합니다.

  • int는 32 비트입니다 (실제로 32 비트라고 가정하기 때문에 64 비트 시스템에서 32 비트로 유지됨)
  • 대부분의 유형 (예 time_t:)은 안전하게 캐스팅 할 수 있습니다.int

인기있는 FLOSS 소프트웨어에서 두 가지 모두 '많은 눈'검토를 거치지 않을 것입니다. 덜 인기 있고 재산이 많으면 저자에 따라 크게 달라집니다.

나는 무료 * nix 세계에서 2038은 '비정상적인'것으로 생각하지만 "소유권"플랫폼 (즉, 많은 수의 소프트웨어 소프트웨어가있는 플랫폼)에서 문제를 기대합니다. 특히 일부 crutial 부분이 유지되지 않을 경우.


'시스템'또는 'OS'가 아닙니다. 대부분의 이전 32 비트 OS (16 비트 OS까지)는 64 비트 수학을 수행 할 수 있습니다. OS 수준에서 64 비트 깊이는 기본적으로 수학을 수행하는 능력이 아니라 메모리 모델에 대한 참조입니다. 그리고 시간은 모두 수학에 관한 것입니다.
geoffc

예, 아니오 32 비트 및 64 비트 OS는 64 비트 산술을 수행 할 수 있습니다 (모든 산술을 에뮬레이션 할 수 있음). 그러나 time_t32 비트 OS에서 (또는 동등한) 32 비트가 발생하는 반면 time_t64 비트 OS에서 (또는 동등한) 64 비트가 발생합니다. 나는 특정 단순화로도 충분히 명확하다고 생각했습니다.
Maciej Piechotka

0

Y2K와 같은 것이면 일부 사람들은 이미 영향을 받아 소프트웨어를 변경하고 있지만 대부분의 개발자는 2030 년대, 아마도 2035 년 중 어느 시점까지 무시할 것입니다.이 시점에서 많은 작업이 완료되고 충분히 오래 된 사람 K & R C를 알고 너무 나이가 들지 않으면 갑자기 많은 돈을 계약 할 수 있습니다. 실제 전환에는 아직 수행되지 않은 많은 작업이 표시 될 것입니다.


-5

Y2K 문제는 4 개가 아닌 연도를 나타내는 2 개의 헌장이었습니다.

많은 시스템은 '00'만 저장했기 때문에 2000과 1900을 구분할 방법이 없었습니다.

거의 모든 시스템은 이제 연도를 저장하기 위해 4 개의 문자를 사용하거나 일종의 라이브러리를 사용합니다.

따라서 10000 년 (Y10K)에 대해 모두 걱정해야합니다. OS 및 라이브러리 작성자를 제외하고 ...


아마도 아무도 (실제로 아무도) 날짜를 저장하고있는 것은 아마도 현재 그런 형식 (즉, DCD 또는 문자열)입니다. 시간은 일반적으로 객체 또는 int에 의해 처리되므로 디스플레이 코드 만 업데이트하면됩니다.
Maciej Piechotka

예, 내 요점은 정확히입니다. Y2K는 날짜를 고정 길이 문자열로 나타내는 아이디어를 효과적으로 없애버 렸습니다.
Stephen Jazdzewski

@Stephen : COBOL 세계에는 없지만 유닉스 / 리눅스에는 COBOL 구현이 거의 없습니다.
David Thornley

@David : COBOL 프로그램은 대부분 Y2K 문제였습니다. 사용자 관점에서 Linux / Unix 시스템에 Y2K 문제가 발생 했습니까? 원래 질문에 대한 간단한 대답은 '아니요'입니다.
Stephen Jazdzewski

4
포스터는 y2k 문제에 대해 묻지 않습니다. 그들은 완전히 다른 짐승 인 y2k38 문제에 대해 묻고 있습니다. 설명은 en.wikipedia.org/wiki/Y2K38 을 확인하십시오 .
Kevin M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.