زمن Unix وكتابة ISO 8601
وحدة خارج النظام الدولي · المقدار: لحظة زمنية كعدد صحيح من الثواني منذ 1970
في التاسع عشر من يناير 2038، عند الساعة الثالثة وأربع عشرة دقيقة وسبع ثوانٍ بالزمن العالمي، يبلغ عدّاد ثوانٍ عرضه اثنان وثلاثون بت القيمة 2 147 483 647 — أكبر عدد يقوى على احتوائه. النبضة التالية ترفع البت الأعلى، فتُقرأ الكلمة الثنائية نفسها سالبةً: الساعات التي تحفظ الزمن بهذا العدّ بالذات ستجد نفسها لا في 2038 بل في ديسمبر 1901. وليست هذه طُرفة من مستقبل بعيد — فالمتحكّم الصناعي أو عدّاد الماء يخدم أطول من الاثني عشر عامًا الباقية.
العدّ مبنيّ في غاية البساطة: الثواني تجري تباعًا من منتصف ليل الأول من يناير 1970، واليوم فيه يحوي دائمًا 86 400 ثانية بالضبط. وهذه البساطة نفسها هي منبع خاصّيتيه معًا. فمن جهة، يتبع من العدد فورًا تاريخٌ تقويمي والعكس، حتى إن كل سجل أحداث وكل قاعدة بيانات وكل نظام ملفات يحفظ الزمن به. ومن جهة أخرى، لا يمكن التعبير عن ثانية كبيسة في مثل هذا العدّ البتة، ما يعني أنه رغم اسمه لا يرقّم ثوانيَ بل أيامًا بكسورها، وهو في الحقيقة دالة خطية لكتابة UTC، لا عدّاد للزمن المنقضي.
01 · التعريف
زمن Unix هو عدد الثواني المنقضية من منتصف ليل الأول من يناير 1970 بالزمن العالمي المنسّق، بشرط أن يحوي كل يوم 86 400 ثانية بالضبط. وكتابة ISO 8601 تقول الشيء نفسه على نحو آخر: بتاريخ تقويمي ووقت من اليوم وبيان الإزاحة عن خط الطول الأول، والحقول تجري بصرامة من الخشن إلى الدقيق.
التحفّظ على 86 400 ثانية ليس تفصيلًا بل أهم ما في التعريف. فالثانية الكبيسة، التي تعلنها دائرة دوران الأرض، لا يستطيع العدّ أن يستوعبها، ولذلك يكرّر النظام لحظة الإدراج قيمةً واحدة بعينها مرتين، أو يعيد الساعة إلى الوراء. ويترتب على ذلك أمر مهم: الفرق بين عددَي unix ليس عدد الثواني التي انقضت فعلًا بين حدثين إذا وقعت بينهما ثانية كبيسة — وقد بلغ الانحراف عن السلّم الذرّي سبعًا وعشرين ثانية.
أما الحد فلا يتوقف على التعريف بل على عرض التخزين. اثنان وثلاثون بت مع إشارة تعطي أكبر قيمة 2 147 483 647، وهي تقع في التاسع عشر من يناير 2038؛ والزيادة التالية تحوّل البت الأعلى إلى واحد وتجعل العدد سالبًا، فتقذف الساعة إلى الثالث عشر من ديسمبر 1901. وأربعة وستون بت تدفع الحد مئتين واثنين وتسعين مليار سنة إلى الأمام، غير أن أجزاء المليار الصحيحة في الأربعة والستين بت نفسها تنفد سنة 2262.
الكتابة وفق المعيار تحلّ مهمة أخرى — التبادل لا التخزين — ولذلك تزن فيها أشياء لا يملكها العدد البتة: الإزاحة الساعية، والفاصل بين التاريخ والوقت، والقاعدة القائلة إن الترتيب الأبجدي يوافق الترتيب الزمني عند تساوي طول السلسلة. وهذه الخاصية الأخيرة بالذات جعلت الصيغة أساسًا للفرز في أسماء الملفات وفي السجلات.
حرّك الزمن بالمنزلق وانظر كيف يمتلئ السجل: البتات تضيء من اليمين إلى اليسار، وما دام الأعلى، بت الإشارة، مظلمًا فالعدد موجب والتاريخ ينمو. وما إن يتجاوز العدّاد 2 147 483 647 حتى يتوهّج البت الأعلى أحمر، ويصير العدد كله سالبًا، وتقفز الساعة إلى 1901.
الخط الأخضر المستقيم هو السلّم الذرّي، حيث كل ثانية ثانيةٌ حقًا. والخط الأحمر المدرّج هو زمن Unix، الذي يعطي عند كل إدراج طابعًا واحدًا بعينه مرتين، فيقف الخط في مكانه. وقد بلغ الانحراف سبعًا وعشرين ثانية وهو ينمو، ولذلك يصلح العدّ لتاريخ تقويمي، لا لقياس المدد في الفيزياء.
02 · التحويل
أدخل طابعًا زمنيًا أو تاريخًا
بين جميع مضاعفات العدّ — الثواني وأجزاء الألف والمليون والمليار — التحويلات دقيقة، إذ لا تختلف إلا بمعامل. والتقريبي سطر واحد: التحويل إلى السلّم الذرّي يقتضي معرفة كم ثانية كبيسة تراكمت حتى اللحظة المعطاة.
تحليل السلسلة وفق المعيار تجريه البطاقة في الكتابة الموسّعة بحرف Z؛ أما الشكل الأساسي بلا فواصل فقد نُقل إلى الضبط الدقيق.
مشكلة سنة 2038 لا تكمن في المعيار بل في العتاد وفي الشفرة القديمة: طوابع من اثنين وثلاثين بت تجلس في برمجيات العدّادات، وفي المتحكّمات الصناعية، وفي صيغ نظم الملفات، وفي قواعد البيانات حيث أُعلن الحقل بأربعة بايتات. وتغيير النوع في المصادر سهل بما يكفي؛ أما المرور على ملايين الأجهزة المركّبة في الاثني عشر عامًا الباقية فمهمة من الطراز نفسه الذي وقف قبل سنة 2000.
| القيمة | ملاحظة | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · مراتب العِظَم
سلّم لوغاريتمي: من الثانية إلى حد الأربعة والستين بت04 · أدوات القياس
بماذا يوضع الطابع الزمني على حدث
شريحة منفصلة ببطارية تُبقي العدّ ما دام الجهاز مطفأً. وهي تحفظ عادةً لا طابع unix بل حقول التقويم منفصلة، وعرض حقل السنة فيها خاص بها، حتى إن الحديث عن 2038 في اللوحات القديمة يبدأ بسؤال: إلى أي سنة تعدّ الشريحة نفسها.
بروتوكول NTP يجلب ساعة الآلة إلى الزمن المشترك بدقة بضعة أجزاء من الألف من الثانية، وهو نفسه يحذّر من الإدراج براية خاصة قبل يوم. وله حدّ خاص أيضًا، وهو يأتي أبكر: العدّ يجري من 1900 في اثنين وثلاثين بت بلا إشارة ويطفح في فبراير 2036.
في السجل يُكتب الطابع إما بعدد وإما بسلسلة وفق المعيار، والثاني أفضل لسبب واحد بالضبط: في السلاسل المتساوية الطول يوافق الترتيب الأبجدي الترتيب الزمني، فتُفرز القيود دون تحليل التاريخ. ولهذا بالذات انتشرت الصيغة بعيدًا خارج تقنية الحوسبة.
جاهزية جهاز لسنة 2038 لا تُختبر إلا بطريقة واحدة — أن تُقدَّم ساعته وراء الحد المشؤوم ويُنظر ما يحلّ بالسجلات والشهادات وحساب الفترات. وهكذا وُجدت بالفعل أعطال في الفوترة، وفي نظم ضبط الدخول، وفي مدد صلاحية المفاتيح، حيث يُصنع تاريخ في المستقبل بالجمع ويطفح قبل الحد نفسه بزمن طويل.
05 · قواعد الكتابة
من الخشن إلى الدقيق، ودائمًا مع الإزاحة
يقتضي المعيار ترتيبًا تنازليًا للحقول، وأربعة أرقام للسنة، والشرطة فاصلًا للتاريخ، وحرف T قبل الوقت؛ وتُبيَّن الإزاحة الساعية إما بحرف Z لخط الطول الأول، وإما بزائد وناقص ساعات ودقائق. ويُكتب طابع unix بعدد صحيح بلا فصل للمراتب، ويجب دائمًا تحديد المضاعف، إذ يفصل معامل الألف الثواني عن أجزاء الألف، وهما يلتبسان بسهولة بحسب حجم العدد.
الكتابة الأولى تُقرأ في البلدان المختلفة على نحو مختلف، ولذلك لا تجوز في تبادل البيانات. والثانية تُسقط الفاصل والإزاحة معًا، فتبقى اللحظة غير محدّدة بيوم في كلا الاتجاهين. والثالثة تفقد الأصفار الأولى، فتكفّ السلاسل عن الفرز الأبجدي — وهي الخاصية التي تُقدَّر الصيغة لأجلها بالذات. والرابعة تساوي بين عدّ unix والسلّم الذرّي، بينما تفصل بينهما سبع وعشرون ثانية من إدراجات متراكمة.
06 · الوحدات المجاورة
وإلى جانبه تقف كل الأعداد المبنية على المبدأ نفسه، لكن من بداية أخرى: زمن NTP من 1900، والتاريخ اليولياني من ظهر سنة 4713 قبل عصرنا، وسلّم منظومة الأقمار من يناير 1980. ولا تختلف إلا بالمبدأ والوحدة، ولذلك تُحوَّل بطرح ثابت.
ثوانٍ ذات إشارة
حده يقع في 2036 بالفعل
الثواني الكبيسة محسوبة بأمانة
من بطاقات Simetrium يجاورها التاريخ اليولياني، ومنه أُخذ ثابت التحويل، سلالم UTC وTAI وUT1، التي تفسّر الثواني الكبيسة الضائعة، ثانية بوصفها وحدة العدّ، و البت، الذي يحدّد عرضُه الحدَّ.
07 · القسم التاريخي
مبدأ اختير من قلّة البتات
في أول دليل لـUnix كان الزمن يُعدّ بأجزاء الستين من الثانية من مطلع 1971، وفي اثنين وثلاثين بت كان مثل هذا العدّ يسع سنتين تقريبًا لا أكثر. وكانت تنفد بسرعة تجعل المبدأ محتاجًا إلى النقل مع كل إصدار للنظام، فتُرك كسر الثانية لصالح الثواني الصحيحة.
وبالانتقال إلى الثواني الصحيحة كسب المطوّرون احتياطيًا قدره مئة وست وثلاثون سنة، وأمكنهم اختيار البداية لليُسر لا للضرورة. فأُخذ الأول من يناير 1970 — أقرب تاريخ مستدير في الماضي، لم تكن سجلات الآلات تبلغه على أي حال — ولم يُغيَّر منذ ذلك الحين ولا مرة واحدة، مع أن النظام أُعيدت كتابته من الأساس أكثر من مرة.
جمعت المنظمة الدولية للتوحيد القياسي الصيغ الوطنية المتباعدة في صيغة واحدة، ووضعت في أساسها قاعدة بسيطة: الحقول تجري من الخشن إلى الدقيق، وكلها بأصفار أولى. وتبيّن أن الأثر الجانبي أهم من القصد — فمثل هذه السلاسل تُفرز كالأعداد، وانتشرت الصيغة في أسماء الملفات والسجلات وبروتوكولات التبادل.
انتقلت أنظمة المكاتب والخوادم إلى أربعة وستين بت منذ زمن، وهناك دُفع الحد وراء كل أفق معقول. وبقي الخطر في مكان آخر: في برمجيات أجهزة عمرها عشرون سنة، وفي صيغ ملفات أُعلن فيها الحقل بأربعة بايتات، وفي حسابات المُدد المستقبلية التي تطفح اليوم بالفعل ما إن يُضاف خمس عشرة سنة إلى تاريخ اليوم.
عدّ لا يعدّ الثواني رغم اسمه
يبدو تعريف زمن Unix كأنه عدّ للثواني، غير أن اشتراط 86 400 ثانية مستوية في اليوم يجعله شيئًا آخر: دالةً خطية لكتابة UTC، لا مقياسًا للزمن المنقضي. وكلما أعلنت دائرة دوران الأرض إدراجًا، وجب على العدّ أن يكرّر قيمةً واحدة بعينها مرتين أو أن يقفز إلى الوراء، وتضيع من فرق الطابعين تلك الثانية بالذات. وقد تراكمت في نصف قرن سبع وعشرون خسارة كهذه، ولذلك يُؤخذ في المسائل التي تتطلب مدةً حقيقية السلّمُ الذرّي لا هذا.
أما الخاصية الثانية فلا تكمن في التعريف البتة بل في طريقة التخزين، وهذا يجعلها الحدَّ الوحيد في فهرسنا الذي لم تضعه الطبيعة ولا اتفاق، بل عرضُ كلمة الآلة. فالتاريخ اليولياني لا ينتهي أبدًا لأنه عدد؛ وزمن Unix ينتهي في التاسع عشر من يناير 2038 لأنه حقل من أربعة بايتات. والفرق بين المقدار وتمثيله لا يشغل علماء القياس عادةً إلا قليلًا، وهنا هو بالذات ما يحسم كل شيء.
الفهرس · وحدات القياس
جواز لكل كمية
سبع وحدات أساسية في النظام الدولي، واثنتان وعشرون مشتقة لها أسماؤها، ومقادير خارج النظام لا تقوم بدونها لا التقنية ولا التقويم.