Tesla Model 3 Manual

นั่งอ่าน Manual Tesla Model 3 ทั้งเล่มแล้วก็พบว่ามันมีจุดซ่อนอยู่พอสมควร เลยสรุปเฉพาะจุดที่สำคัญและคิดว่าเล่นเองอาจจะหาไม่เจอ หรือที่มีคนถามบ่อยๆ มาดังนี้

References

หน้าจอ

หน้าจอหลัก

  • ปัดขอบจอออกจากตัว (ไปทางซ้าย) เพื่อแสดงตัวเลือกเกียร์
    • กดที่ P (ด้านบนจอ) ค้างไว้เพื่อเบรคฉุกเฉิน
    • เกียร์ว่าง กด N ด้านล่าง (ต้องกดเบรคเพื่อออกจาก N)
    • เปลี่ยนเกียร์ได้ที่ความเร็วน้อยกว่า 8 กม/ชม (ไม่ต้องหยุดหรือเหยียบเบรค)
  • ตั้งแอพที่แสดงด้านล่าง โดยเปิดหน้ารายการแอพ (…) แล้วกดแอพใดก็ได้ค้างไว้ ลากลงไปด้านล่าง

สัญลักษณ์ด้านบนสุดของหน้าจอ (Status Icon)

  • Lock กดเพื่อล็อครถ
  • Sentry mode (แสดงเฉพาะตอนจอด) กดเพื่อเปิดปิด Sentry Mode เฉพาะการขับรอบนี้
  • App แสดงว่ามีแอพมือถือใช้งานตำแหน่ง GPS ของรถอยู่

หน้าจอขับขี่

  • หลอดสีเทา/เขียวด้านบน คือการใช้ไฟ ไปทางขวาคือจ่ายไฟ ไปทางซ้ายคือ regen
  • รูปพวงมาลัย ข้างๆ เกียร์ที่เลือก คือใช้งาน Autosteer ได้ (สีน้ำเงิน = กำลังทำงาน, สีเทา = ใช้ได้แต่ไม่ได้เปิดใช้)
  • TACC Max คือความเร็ว Cruise control
  • กดที่ % แบต เพื่อเปลี่ยนเป็นระยะทาง ระยะทางที่วิ่งได้จะขึ้นอยู่กับประวัติผู้ขับขี่ ใน Profile นั้นๆ

สัญลักษณ์ข้างหน้าจอ

  • TPMS เติมลมยาง
  • Auto High Beam ไฟสูง auto ทำงานอยู่ สีน้ำเงิน = ตอนนี้ไฟสว่าง, สีเทา = ตอนนี้ไฟดับ
  • Slip Start ระบบ Traction control ปิดอยู่ หรือ Slip start เปิดอยู่
  • Vehicle Hold ระบบ Vehicle Hold ใส่เบรคอยู่
  • Limited Regen Regen ได้จำกัด
  • Cold แบตเย็นเกินไป

ตั้งค่าหน้าจอ

เมนู ตั้งค่า > Display

  • เช็คหน้าจอ โดยกด Screen Clean Mode จอจะมืดและกดไม่ได้ เพื่อให้เช็ดหน้าจอได้
  • กด Lock Rear Display เพื่อล็อคไม่ให้เล่นจอหลัง
  • ตั้งขนาดตัวอักษร Text Size ได้ระหว่าง Standard, Large

หน้าจอหลัง

  • คุมจอหลังผ่านจอหน้าได้ โดยใช้แอพ “Rear Screen”
  • สามารถเชื่อมหูฟัง Bluetooth ได้ 2 คู่บนหน้าจอ (ใช้เชื่อมมือถือสำหรับเปิดเพลงไม่ได้)
  • เลื่อนเบาะผู้โดยสารหน้าได้ผ่านหน้าจอ

คำสั่งเสียง (บางส่วน)

ใช้งานได้เฉพาะภาษาอังกฤษ

  • Make it cooler = ขอหนาวๆ
  • Make it warmer = ขออุ่นๆ
  • Direct airflow to my face = เป่าเข้าหน้า
  • Increase the fan speed = เร่งพัดลม
  • Decrease the fan speed = ลดพัดลม
  • Turn on recirculate = เปิดอากาศหมุนเวียน (ไม่เอาอากาศข้างนอก)
  • Speed up the wipers = ปัดน้ำฝนเร็วขึ้น
  • Turn on the wipers = เปิดที่ปัดน้ำฝน
  • Sentry Mode on = เปิด Sentry Mode (ต้องจอดรถ)
  • Lock the doors = ล็อครถ (ต้องจอดรถ)
  • Fold the mirrors = พับกระจก (ต้องจอดรถ)
  • Open charge port = เปิดช่องชาร์จ (ต้องจอดรถ)
  • Stop charging = หยุดชาร์จ (ต้องจอดรถ)
  • Open the glovebox = เปิดช่องเก็บของคอนโซลหน้า (ต้องจอดรถ)
  • Mute voice guidance = ปิดเสียงนำทาง
  • Navigate home = นำทางกลับบ้าน
  • Raise the volume = เพิ่มเสียง
  • Lower the volume = ลดเสียง
  • Skip to next = เพลงถัดไป
  • Report = แจ้งบั๊ก
  • ฯลฯ

ทาง Tesla มีการบันทึกคำสั่งเสียงที่ใช้ (ไม่บันทึกเสียง)

ความบันเทิง

  • เชื่อม Bluetooth ได้สูงสุด 10 เครื่อง
    • ตั้งมือถือเป็น Priority Device เพื่อเลือกเป็นเครื่องหลัก หากไม่ตั้งหรือไม่เจอเครื่องนี้จะเอาเครื่องสุดท้ายที่เคยต่อเป็นเครื่องหลัก
    • ต้องเชื่อมมือถือสำหรับฟังเพลง แยกกับระบบกุญแจ
    • สามารถโทรออก รับสายได้จากบนจอ
    • สามารถเชื่อมจอยเกมเพื่อใช้เล่นเกม (เสียบจอย USB ได้ที่ช่องเก็บของคอนโซลหน้า)
    • ใช้งานได้พร้อมกันสูงสุด 2 อุปกรณ์
  • แอพสตรีมมิ่ง ใช้ได้เฉพาะเมื่อมี WiFi หรือ Premium connectivity
    • Spotify มีบัญชี Premium ของรถแถมให้กับ Premium connectivity หรือใช้บัญชีตัวเองก็ได้
  • Boombox ใช้เล่นเสียงจากลำโพงเสียงสังเคราะห์ภายนอก
    • เล่นเพลงที่เปิดอยู่ภายนอก
    • Megaphone = ประกาศ
    • กดแตรเพื่อเล่นเสียงจาก USB 5 วินาที
      • USB ต้องมี Folder Boombox (อยู่คนละ Partition กับ TeslaCam – ดูหัวข้อกล้อง)
      • วางไฟล์เสียง .wav หรือ .mp3 รถจะแสดงเฉพาะ 5 ไฟล์แรกตามลำดับตัวอักษร
      • เสียบ USB ที่ช่องเก็บของคอนโซลหน้า

แอร์

  • แตะที่ลูกศรปรับอุณหภูมิแล้วกด “Split” เพื่อปรับแอร์แยกระหว่างคนขับ-ผู้โดยสาร
  • แตะอุณหภูมิเพื่อเปิดเมนูแอร์
    • Keep Climate On = เปิดแอร์ทิ้งไว้ แม้ออกจากรถ
    • Dog Mode = เปิดแอร์ทิ้งไว้ แสดงอุณหภูมิไว้ที่หน้าจอ และสามารถดูกล้องในรถได้จากในแอพ (ปกติจะดูกล้องไม่ได้ถ้ามีคนอยู่ในรถ) ไม่สามารถเปิดกระจกได้
    • Camp Mode = เปิดแอร์ เปิดช่อง USB และช่องไฟ 12V เปิดหน้าจอไว้ใช้งานได้ รถจะไม่ล็อคอัตโนมัติ
    • ใช้งานได้เฉพาะเกียร์ P แบต 20% ขึ้นไป
  • Cabin Overheat Protection เมนู ตั้งค่า > Safety > Cabin Overheat Protection
    • On = เปิดแอร์อัตโนมัติ เมื่อห้องโดยสารอุณหภูมิเกิน 40 องศา
    • No A/C = เปิดแต่พัดลม
    • Off = ปิด
    • จะทำงานเมื่อออกจากรถ จนครบ 12 ชั่วโมง หรือแบตต่ำกว่า 20%
    • เปิดพร้อมกับการแจ้งเตือนเมื่อมีคนโยก/ลากรถ Tilt/Intrusion ไม่ได้
  • น้ำแอร์อาจหยดใต้ท้องรถขณะจอด ปิดแอร์ก่อนจอดรถ 30 วินาทีเพื่อลดน้ำที่หยดออก

ระบบนำทาง

  • ข้อมูลจราจร แผนที่ดาวเทียม จะต้องใช้ Premium connectivity
  • ในการนำทาง กด … หรือ Controls > Navigation เพื่อตั้งค่า
    • Navigation Guidance เลือก Voice เพื่อเปิดเสียงนำทาง
    • Online Routing เลี่ยงรถติด
  • สามารถแชร์หมุดในมือถือมาที่แอพ เพื่อนำทางได้
  • การนำทางจะแสดงข้อมูลแบตเมื่อถึงปลายทาง โดยคำนวณจากพฤติกรรมการขับขี่ เนิน ทิศทางลม อุณหภูมิ ฯลฯ ทำให้แม่นยำ
  • หากปลายทางอยู่ไกลเกินระยะแบต รถจะเพิ่ม Supercharger ให้
  • หากรถไม่มีอินเตอร์เน็ตจะค้นหาสถานที่ไม่ได้ แต่ยังนำทางได้
  • เฉพาะ Premium Connectivity จะแสดง 3 เส้นทางให้เลือก

รถ

  • ถ้าใช้ Car Seat สำหรับเด็กด้านหน้า ต้องปิดถุงลมที่ ตั้งค่า > Safety > Passenger Front Airbag
  • เวลาล้างรถ อย่าลืมปิดปัดน้ำฝน Auto
  • ห้ามใช้น้ำยาเคมีทำความสะอาดกล้องในห้องโดยสาร

Restart

  • Restart หน้าจอ ให้เข้า P แล้วกดปุ่มลูกกลิ้ง 2 ด้านพร้อมกัน ค้างไว้จนหน้าจอดับ (ไม่ต้องเหยียบเบรค)
  • Restart รถโดยเข้า P แล้วไปที่เมนู ตั้งค่า > Safety > Power Off รอเฉยๆ 2 นาที แล้วจึงเปิดประตูหรือเหยียบเบรค

ระบบไฟฟ้า

  • ช่อง USB-C 3 ช่อง ไฟรวมกัน 3 ช่อง 42W หรือ 65W ถ้าใช้ 2 ช่อง
    • ด้านหลังกล่องคอนโซลหน้า 1 ช่อง
    • ใต้จอหลัง 2 ช่อง
  • ช่อง USB A ในช่องเก็บของด้านหน้า 1 ช่อง สำหรับเสียบ flash drive บันทึกภาพจากกล้อง หรือใส่เพลง
  • ช่องชาร์จไร้สาย 2 ช่องด้านหน้า มาตรฐาน Qi 15W
    • ไม่ควรวางบัตร เหรียญ กุญแจ โลหะไว้บนช่อง
  • ช่องจุดบุหรี่ ในช่องเก็บของใต้คอนโซลหน้า จ่ายไฟ 12A
  • จ่ายไฟเฉพาะเวลารถเปิดอยู่ เช่น เปิด Sentry Mode, Keep Climate On, Dog Mode, Camp Mode, ระหว่างชาร์จไฟ, ระหว่างติดต่อกับแอพ, ระหว่างชาร์จแบตลูกเล็ก, ฯลฯ

กล้อง

  • รถมีกล้อง 6 ตัว
    • ด้านบนป้ายทะเบียนหลัง
    • เสา B ทั้งสองฝั่ง
    • กระจกหน้ารถ ด้านหลังกระจกมองหลัง 2 ตัว
    • ไฟเลี้ยวด้านข้าง ทั้งสองข้าง
    • กล้องภายในห้องโดยสาร (ด้านบนกระจกมองหลัง)
  • ต้อง calibrate กล้องโดยขับประมาณ 32-40 กม. บนถนนที่ตีเส้นชัดเจนทั้ง 2 ฝั่งถนน จึงจะใช้งาน Autopilot ได้
    • ควร calibrate บนถนน 5 เลนขึ้นไปที่ตีเส้นชัดเจน มีรถน้อย โดยขับเลนกลาง
    • ถ้าขับไป 160 กม. แล้วใช้งานไม่ได้ให้แจ้งศูนย์
  • ถ้ากล้องเลื่อน (เช่นเปลี่ยนกล้องหรือกระจกหน้ารถ) ให้ลบ calibrate โดยกด ตั้งค่า > Service > Camera Calibration > Clear Calibration
  • กล้องหน้ารถจะบันทึกใน Flash drive ภายในช่องเก็บของคอนโซลหน้าเท่านั้นdd
    • USB2.0 ความจุ 64GB ขึ้นไป ความเร็วเขียน 4MB/s
    • Format เป็น exFAT, FAT32, ext3 หรือ ext4
    • สร้าง Folder “TeslaCam” “TeslaTrackMode”
    • ถ้าจะใส่เพลงต้องแยก partition exFAT ออกไปต่างหาก
    • ตั้งค่าบันทึกกล้องหน้า ตั้งค่า > Safety > Dashcam (Off = ปิด, Auto = บันทึกเมื่อชน, Manual = ต้องกดแอพ Dashcam เพื่อบันทึก 10 นาที + On Honk = กดแตรเพื่อบันทึก 10 นาที)
    • รถจะเซฟไฟล์ทุกกล้องไว้ใน Folder TeslaCam/Recent ตลอดเวลา ไฟล์ละ 3 นาที รวมกัน 1 ชั่วโมงก่อนจะทับ ชื่อไฟล์จะเป็นเวลาที่บันทึก เขตเวลา UTC (ลบ 7 ชั่วโมงจากเวลาไทย) (ต้องดูไฟล์ในคอมเท่านั้น ถ้าไม่ได้กดบันทึกในรถ)
  • Sentry Mode เมื่อเปิดรถจะสแกนกล้องตลอดเวลาที่จอดรถ และบันทึกเหตุการณ์ที่น่าสงสัย แจ้งเตือนทางโทรศัพท์ กระพริบไฟ
    • ทำงานเฉพาะเมื่อแบต 20% ขึ้นไป
    • ตั้งค่า > Safety > Sentry Mode > Camera-Based Detection เปิดปิดการตรวจจับจากกล้อง ถ้าปิดจะใช้เซนเซอร์รถเท่านั้นจึงบันทึก
    • ตั้งค่า > Safety > Sentry Mode > View Live Camera via Mobile App เพื่อดูบันทึกผ่านแอพ (ได้เฉพาะเมื่อรถล็อค ไม่มีคนอยู่) ต้องใช้ Premium connectivity จำกัดวันละ 15 นาที

ประตู หน้าต่าง กระจกมองข้าง

  • รถ 1 คันมีกุญแจได้ 19 ดอก
  • แอพ
    • ต้องล็อคอินแอพ Tesla ไว้ ห้ามออก
    • สามารถใช้งานได้ แม้ไม่มีเน็ต
    • ถ้ามีรถหลายคัน ต้องเลือกรถที่ต้องการไว้ในแอพ
    • มือถือต้องเปิด Bluetooth และ Location ตลอดเวลา
    • รถต้องตั้งเมนู ตั้งค่า > Safety > Allow Mobile Access จึงจะใช้แอพได้
    • พอจับสัญญาณ bluetooth ของมือถือได้ ดึงประตูประตูจะปลดล็อค
    • ถ้าเดินออกนอกระยะ รถจะล็อคอัตโนมัติ (ต้องเปิด ตั้งค่า > Locks > Walk-Away Door Lock)
      • ถ้าตั้ง Exclude Home ไว้ รถจะไม่ล็อคเองที่บ้าน
      • รถจะไม่ล็อคถ้ามีแอพมือถืออยู่ในรถ, ประตูปิดไม่สนิท หรือ ปิด Bluetooth ของมือถือ
      • รถจะไม่ล็อคถ้าคนขับออกจากรถ ปิดประตูแล้วรถยังเจอว่ามีแอพมือถืออยู่ในรถอีกหลายนาที
      • รถจะไม่ล็อคถ้าคนขับออกทางประตูอื่นที่ไม่ใช่ประตูคนขับ
      • ตั้งค่า > Lock > Car Left Open Notification จะแจ้งเตือนที่แอพหากลืมล็อครถ หรือเปิดประตูทิ้งไว้
    • สามารถใช้มือถือได้พร้อมกัน 3 เครื่อง ถ้าจะเพิ่มมือถืออีกต้องปิด Bluetooth ของเครื่องในระยะออกก่อน
    • ต้องตั้ง Pair Bluetooth แยกต่างหาก ในกรณีที่ต้องการจะฟังเพลงหรือโทรศัพท์
    • มือถือที่รองรับ NFC หลังจากเชื่อมมือถือแล้วสามารถใช้แตะที่เสา B ได้เหมือนบัตร
  • บัตร
    • แตะที่เสา B ใต้กล้องเพื่อล็อครถ
    • เปิดรถแล้วสามารถเหยียบเบรคออกได้เลย ภายใน 2 นาที
    • ถ้าเกิน 2 นาที ให้วางบัตรไว้บนแท่นชาร์จไร้สาย
    • รถจะไม่ล็อคอัตโนมัติถ้าไม่ได้ใช้แอพเปิด
    • สามารถใช้บัตร 1 ใบกับรถหลายคันได้ โดยชื่อบัตรที่ตั้งในรถจะเชื่อมกันทุกคัน
  • กรณีฉุกเฉิน ไฟฟ้าดับ ให้ดึงคันโยกด้านหน้าปุ่มปรับกระจก ด้านหลังให้ดึงสายรัดใต้ในช่องลับ ในที่ไว้ของด้านล่างประตู (ไม่ควรใช้ถ้ามีไฟฟ้า)
  • เสียงล็อครถ
    • เปิดปิดเสียงล็อครถที่ ตั้งค่า > Locks > Lock Confirmation Sound
    • เปลี่ยนเสียงที่ App Toybox > Boombox > Lock Sound
  • ตั้งให้พับกระจกมองข้างอัตโนมัติ ตั้งค่า > Mirrors > Mirror Auto Fold
    • กระจกมองข้างจะกางเองที่ความเร็ว 50 กม/ชม
    • ถ้ากดพับกระจกมองข้าง จะมีปุ่ม Save Location เพื่อให้พับกระจกมองข้างเฉพาะที่นี่
  • ตั้งให้ปิดกระจกอัตโนมัติเมื่อล็อครถที่ ตั้งค่า > Lock > Close Windows on Lock
  • กรณีกระจกเปิดปิดไม่ถูกต้อง ให้ Calibrate
    • ปิดประตูที่กระจกเสีย และประตูคนขับ
    • ใช้ที่ปรับกระจกข้างคนขับ ยกกระจกขึ้นสุด ลงสุด ขึ้นสุด

ช่องเก็บของ

พวงมาลัย

  • ลูกกลิ้งซ้าย ใช้ปรับเพลง
    • กดปุ่มปัดน้ำฝน แล้วเลื่อนซ้ายขวาเพื่อปรับความเร็ว กดลูกกลิ้งเพื่อยืนยัน
    • กดค้างไว้เพื่อตั้ง shortcut
    • รับสาย เลื่อนซ้าย วางสาย/ไม่รับสาย เลื่อนขวา
  • ลูกกลิ้งขวา ใช้ Autopilot
    • กดเพื่อเปิด Autosteer
    • เลื่อนซ้ายขวาปรับระยะห่าง
    • ขึ้นลง ปรับความเร็ว
  • กดลูกกลิ้ง 2 ข้างพร้อมกัน เปิดตัวปรับเกียร์ด้านบน ถ้ากดค้างจะ restart
  • กดปุ่มปัดน้ำฝนค้างไว้ เพื่อฉีดกระจก (ฉีดจนกว่าจะปล่อยปุ่ม)

ไฟ

  • ไฟหน้ารถจะติดในที่มืดค้างไว้ 1 นาทีหรือจนกว่ารถล็อค ตั้งค่าที่เมนู ตั้งค่า > Lights > Headlight After Exit
  • เวลาใช้ Autosteer ไฟสูงออโต้จะเปิด ต้องกดปิดเองทุกครั้งที่มีการเปิด Auto steer
  • ปรับมุมไฟที่เมนู ตั้งค่า > Service >Adjust Headlight (ไม่ควรปรับเพราะคืนค่าเดิมไม่ได้)
  • ไฟเลี้ยวจะปิดเองเมื่อเปลี่ยนเลนหรือเข้าทางร่วมทางแยกแล้ว ถ้าต้องการเปิดค้างไว้ให้กดค้าง ตั้งค่าที่เมนู ตั้งค่า > Lights > Automatic Turn Signals
  • ถ้าขับเกิน 50 กม./ชม และเบรคเร็วๆ หรือระบบเบรคฉุกเฉิน ไฟเบรคจะกระพริบรัวๆ ถ้าหลังจากนั้นรถจอด ไฟฉุกเฉินจะทำงานจนกว่ากดคันเร่ง

ผู้ขับขี่

  • เพิ่มผู้ขับขี่ได้สูงสุด 10 คน
    • ควรแชร์ให้ในแอพก่อน ถ้าต้องการ
    • กดรูปคนด้านบนจอ > Add New Driver
    • สามารถตั้งค่า Driver Profile Settings แล้วเลือกบัญชี Tesla ได้
    • สามารถตั้งค่า > Locks > Keys เพื่อผูกบัญชีกับกุญแจได้
    • 1 คนผูกกี่กุญแจก็ได้ แต่ 1 กุญแจได้แค่ 1 คน
  • ข้อมูลผู้ขับขี่ที่ผูกบัญชี Tesla จะเชื่อมระหว่างคัน
  • หากต้องการถอยเบาะอัตโนมัติ ให้เปิด Use Easy Entry
  • ข้อมูลที่บันทึกแยกคน จะแสดงติ๊กสีเขียวตอนแก้ที่เมนูเปลี่ยนคน

การขับขี่

  • อย่าย้ำเบรคเพราะจะขัดการทำงานของ ABS
  • เมื่อปลดเข็มขัด/เปิดประตู/เสียบสายชาร์จ จะเข้า P อัตโนมัติ
  • ถ้าสายชาร์จเสียบอยู่ เปลี่ยนเกียร์ไม่ได้
  • เปลี่ยนเกียร์อัตโนมัติ เมนู ตั้งค่า > Pedals & Steering > Auto Shift out of Park เวลาออกจาก P รถจะเลือกเกียร์ D หรือ R เอง
    • รถจะไม่เลือกเกียร์อัตโนมัติ ถ้าไม่ใส่เข็มขัด, ไม่กดเบรค, ไม่ปิดประตู, มีการใช้เกียร์ด้านบน, หรืออยู่ใน Valet Mode
  • ถ้าจะเข้าเกียร์ว่าง ใช้เมนู ตั้งค่า > Service > Towing > Transport Mode สามารถเข็นได้เป็นระยะสั้น
  • เมื่อรถหยุด Vehicle Hold จะทำงานและใส่เบรคให้โดยไม่ต้องเหยียบ การปลด Vehicle Hold ให้กดคันเร่ง แตะเบรคแล้วปล่อย หรือใส่เกียร์ว่าง เบรคจะทำงานอยู่ 10 นาทีก่อนจะเปลี่ยนเป็น P ให้
  • การออกจากหลุม โคลน หรือกรณีที่ล้อฟรี ให้ตั้งค่า > Pedals & Steering > Slip Start
  • ลดเสียงเตือนต่างๆ ที่ไม่สำคัญ โดยไปที่ ตั้งค่า > Safety > Joe Mode
  • เสียงต่างๆ จากตัวรถ ฟังได้ที่ Normal Operating Sounds
  • เสียงสังเคราะห์จะทำงานที่ความเร็ว 40 กม/ชม หรือต่ำกว่า หรือในเกียร์ R

Autopilot

Autopilot (ไม่ซื้อเพิ่ม) มี 2 แบบ

  • Traffic Aware Cruise Control (TACC) คือ ปรับความเร็วและระยะห่างตามคันหน้า
  • Autosteer เหมือน TACC แต่บังคับรถให้อยู่ในเลนด้วย
    • ระบบจะตั้งไฟสูง Auto เมื่อใช้งาน

จะใช้งานได้ต้องมีรถคันหน้า หรือขับตั้งแต่ 30-140 กม/ชม

ฟีเจอร์ต่อไปนี้ต้องซื้อเพิ่ม

  • Autosteer เปลี่ยนเลนเอง เมื่อตบไฟเลี้ยว
  • Navigate on Autopilot เปลี่ยนเลน เลี้ยวแยก ใช้ทางออกทางหลวงเอง
  • ถอยจอดออโต้
  • Summon เข้า ออกซองได้จากแอพ
  • Smart Summon ออกจากที่จอดรถไปตำแหน่งที่กำหนด
  • FSD: หยุดรถตามป้ายหยุด และไฟแดง

การตั้งค่า เมนู ตั้งค่า > Autopilot

  • Autopilot Features > Autosteer (Beta) เปิดใช้งาน Autosteer
  • Set speed เมื่อเปิด Autopilot แล้ว ให้ตั้งความเร็วเป้าหมายเป็นความเร็วปัจจุบัน หรือความเร็วสูงสุดตามกฎหมาย (Speed Limit)
  • Autopilot activation คือ ตั้งให้เปิด Autosteer โดยกด 1 ครั้ง หรือ 2 ครั้ง (หากตั้งเป็นกด 1 ครั้งจะใช้งาน TACC อย่างเดียวไม่ได้)

ออกจาก Autopilot โดยกดลูกกลิ้งขวา กดเบรค หรือหมุนพวงมาลัย

เมื่อรถคันหน้าจอด Autopilot จะจอดตามด้วย (Stop and go)

Active safety

  • ระบบป้องกันการออกจากเลน ตั้งค่า > Autopilot> Lane Departure Avoidance (Warning = สั่นพวงมาลัย, Assist = หักคืนให้)
  • ระบบป้องกันการชนขณะเปลี่ยนเลน เปิดอัตโนมัติทุกครั้งที่ขับ ใช้งานได้ที่ความเร็ว 64-145 ที่ถนนที่มีเส้นชัดเจน
  • ระบบเตือนชนด้านหน้า เปิดอัตโนมัติทุกครั้งที่ขับ สามารถตั้งค่า > Autopilot > Forward Collision Warning เป็น Late/Medium/Early
  • ระบบเบรคฉุกเฉิน เปิดอัตโนมัติทุกครั้งที่ขับ ใช้งานได้ที่ความเร็ว 5-200
    • จะไม่เบรคถ้าหักพวงมาลัย, ปล่อยเบรค, เพิ่มคันเร่ง หรือไม่พบสิ่งกีดขวางแล้ว
  • ระบบป้องกันการชนสิ่งกีดขวาง ตั้งค่า > Autopilot > Obstacle-Aware Acceleration ใช้งานได้ที่ความเร็วต่ำกว่า 16 กม/ชม
  • ระบบเตือนความเร็วเกินกำหนด ตั้งค่า > Autopilot > Speed Limit Warning (ปิด/แสดงป้ายความเร็ว/มีเสียงเตือน)

การชาร์จ

  • เมื่อตั้งนำทางไปที่ Supercharger รถจะอุ่นแบตให้
  • หากไม่ใช้งาน ให้เสียบชาร์จทิ้งไว้
    • สามารถเสียบชาร์จทิ้งไว้ได้ไม่จำกัดระยะเวลา
    • ควรเสียบชาร์จเป็นประจำ ไม่ต้องรอแบตลดก่อน
    • รถสามารถใช้ไฟจากเครื่องชาร์จมาจ่ายไฟให้อุปกรณ์ภายในรถ ขณะที่แบตเต็มแล้ว
  • แบตจะลดวันละ 1% แม้ไม่ใช้รถ
  • หากแบตเหลือ 0% แล้วอุปกรณ์เสียหายไม่อยู่ในการรับประกัน
  • อากาศเย็น ขณะชาร์จอาจมีไอน้ำ
  • อากาศร้อน แอร์อาจจะไม่เย็นเนื่องจากเอาไปทำความเย็นให้แบต
  • สายชาร์จจะถอดได้ต้องปลดล็อครถก่อน
  • กรณีฉุกเฉิน ดึงสายออกไม่ได้ ให้หยุดชาร์จในหน้าจอ ดึงสายปลดภายในกระโปรงท้าย แล้วจึงดึงสายออก
  • ช่องชาร์จจะปิดเองถ้าไม่เสียบสายชาร์จ หลายๆ นาที
  • การชาร์จด้วยที่ชาร์จฉุกเฉิน ให้เสียบปลั๊กก่อนต่อเข้ารถ
  • ตั้งเวลาชาร์จได้ผ่านแอพ หรือเมนู ตั้งค่า > Charging
    • Scheduled Charging ตั้งเวลาที่จะเริ่มชาร์จ (รถจะชาร์จทันทีถ้าเสียบสายตั้งแต่เวลาที่เลือกไว้ จนถึง 6 ชั่วโมงให้หลัง)
    • Scheduled Departure ตั้งเวลาที่จะใช้รถ
      • Preconditioning คืออุ่นแบต และเปิดแอร์เตรียมไว้ก่อนถึงเวลาที่ใช้ (ใช้ไฟจากเครื่องชาร์จ หรือแบตหากแบตมากกว่า 20%)
      • Off-Peak Charging คือให้เริ่มชาร์จตอนใกล้เวลาใช้รถ โดยตั้ง Change Off-Peak Hours ได้ว่าควรจะหยุดชาร์จเวลาใด
        • แม้ไม่ได้ใช้ไฟ TOU ก็แนะนำให้เปิดใช้เพราะจะได้ไม่ต้องอุ่นแบต
        • ถ้าคำนวณแล้วชาร์จเต็มไม่ทันเวลาที่ตั้งไว้ รถจะเริ่มชาร์จทันที และอาจชาร์จเกินเวลา Off-Peak Hours ที่ตั้งไว้
      • สามารถตั้งให้ทำงานเฉพาะวันธรรมดาได้

แอพ

  • แท็บ Controls
    • ล็อครถ เปิดกระโปรงหน้า กระโปรงท้าย ช่องชาร์จ กระจก
    • กระพริบไฟ บีบแตร
    • เปิด Keyless Driving สำหรับขับโดยไม่มีกุญแจ หรือไม่ต้องการใส่รหัส หรือหน้าจอค้าง
  • แท็บ Climate
    • เปิดปิด Dog Mode, Camp Mode, Cabin Overheat Protection
    • เปิดแอร์จากในแอพได้ จนกว่าแบตต่ำกว่า 20% หรือไม่เกิน 2 ชั่วโมง
  • แท็บ Location ติดตามตำแหน่งของรถ
  • แท็บ Schedule ตั้งเวลาชาร์จ หรือใช้รถ สามารถตั้งตามสถานที่ได้
  • แท็บ Security
    • เปิดปิด Sentry Mode
    • ดูกล้อง Sentry Mode (ต้องเปิดในรถ รถล็อคอยู่ และไม่มีคนอยู่ในรถ) – ใช้ได้เฉพาะ Premium connectivity จำกัดวันละ 15 นาที
    • เปิดปิด Valet Mode (ต้องใช้บัตรเท่านั้น, จำกัดความเร็ว 113 กม/ชม, ลดอัตราเร่ง, ห้ามเปิดกระโปรงหน้า ช่องเก็บของคอนโซลหน้า, ดูตำแหน่งบ้าน/ที่ทำงานไม่ได้, ปิดคำสั่งเสียง, ปิด Autopilot, ยกเลิกแอพไม่ได้, เลือกคนขับไม่ได้, เล่นแอพไม่ได้, แก้กุญแจไม่ได้)
    • เปิดปิดการจำกัดความเร็ว (80-193 กม/ชม) จะมีแจ้งเตือนหากขับใกล้ความเร็วที่กำหนด
  • สามารถเพิ่มคนขับที่ Security > Add Driver (คนขับรองสามารถใช้ได้ทุกคำสั่ง ยกเว้นซื้ออัพเกรด)
  • การเช็คข้อมูลจากแอพจะทำให้รถทำงาน ซึ่งจะกินแบต
  • แชร์สถานที่จากแอพแผนที่ในมือถือมาที่แอพ เพื่อส่งไปที่รถ
  • เมนู Location > Navigate สามารถใช้สร้าง Trip ที่มีการหยุดหลายๆ จุดได้ แล้วกด Send to Car เพื่อส่งไปที่รถ

การบำรุงรักษา

  • ถ้าฝนตก ทำความสะอาดกล้องทุกสัปดาห์โดยฉีดน้ำ และเอาผ้าซับ
  • ใบปัดน้ำฝนยกได้เล็กน้อย
  • ใบปัดน้ำฝนด้านคนขับขนาด 650 มม ด้านคนนั่งขนาด 475 มม
  • เช็คน้ำมันเบรค ทุก 4 ปี
  • ไม่ควรเปิดหรือเติมน้ำหล่อเย็นแบตเตอรี่
  • เปลี่ยนถุงดูดความชื้นทุก 4 ปี
  • เปลี่ยนกรองอากาศทุกปี
  • สลับยางทุก 10,000 กม. หรือยางสึกเกิน 1.5 มม.
  • เวลายกรถให้ใช้จุกยางรองตามตำแหน่งที่กำหนด

Wall of Text #15: Who compile the compiler

เป็นคำถามที่สงสัยตั้งแต่เด็กๆ ว่าโปรแกรมเราเขียนใน Python แล้วเวลารันต้องใช้ Python interpreter ที่โหลดในเน็ตมา ตัวไฟล์ Python interpreter มันสร้างขึ้นมาได้ยังไง

คำตอบก็ไปดูง่ายๆ คือ CPython ที่โหลดในเว็บมันเขียนด้วยภาษา C ก็เลยใช้ C compiler สร้างไฟล์นั้นขึ้นมา แล้วใครสร้างไฟล์ของ C compiler?

Linux from Scratch

ตอนประมาณ ม. ต้นเคยทำ Linux from Scratch ซึ่งเป็นหนังสือที่สอนวิธีสร้าง Linux ตั้งแต่ต้นด้วยตนเอง ไม่ได้สร้างมาจาก Linux อื่นๆ ที่มีอยู่แล้ว เขาจะมีแผ่นซีดีมาให้ซึ่งมีโปรแกรมพื้นฐานให้ประมาณหนึ่ง (Linux จอดำ) จากนั้นให้เรา compile โปรแกรมต่างๆ

ในเล่มบอกว่าตัว C compiler ที่ใช้คือโปรแกรม GCC ซึ่งเขียนด้วยภาษา C โดยให้เราเอา C compiler ในแผ่นซีดี compile GCC source code ก็แปลว่าต้องมี C compiler ก่อน จึงจะคอมไพล์ C compiler ได้ ก็เลยเป็นปัญหาไก่กับไข่ แต่มันตอบคำถามหนึ่งคือถ้าเราสร้างคอมพิวเตอร์สถาปัตยกรรมใหม่ (new computer architecture) ขึ้นมาเราจะเอา C compiler มาจากไหน โดยวิธีที่เขาเขียน สมมุติว่าผมสร้างเครื่องสถาปัตยกรรม whs32 ขึ้นมา และใช้เครื่อง amd64 เป็นเครื่อง desktop ให้ทำดังนี้

  1. แก้ไขโค้ด gcc เพิ่มให้สามารถ generate machine code ของ whs32 ได้
  2. เอา compiler ในเครื่อง amd64 ที่ generate machine code ของ amd64 มา compile gcc ตัวใหม่ เรียกว่า stage1 ซึ่งยังรันบน amd64 แต่ให้ผลลัพท์เป็นโค้ดที่รันใน whs32 (gcc สามารถเลือกให้ output machine code เป็นสถาปัตยกรรมเครื่องใดๆ ก็ได้ ไม่จำเป็นต้องเป็นเครื่องที่รันอยู่)
  3. เอา stage1 ที่รันในเครื่อง amd64 มา compile ตัวเอง จะได้ gcc อีกตัวเรียกว่า stage2 ซึ่งรันบน whs32 และให้ผลลัพท์เป็นโค้ดที่รันใน whs32
  4. เอา stage2 รันบนเครื่อง whs32 มา compile ตัวเองใหม่ จะได้ stage3 เป็นอันเสร็จ
    • ที่ต้องทำ stage3 เพราะว่า stage2 อาจจะมีการอ้างอิง library, path ต่างๆ บนเครื่อง amd64 ทำให้ไปใช้งานจริงบนเครื่องอื่นไม่ได้ วิธีแก้ไขคือปิดฟีเจอร์ที่ไม่จำเป็นใน stage2 ออกไปก่อนเพื่อให้ compiler จบในตัว แล้วค่อย compile stage3 ที่มีฟีเจอร์ครบถ้วนในระบบจริง
    • เวลา gcc compile ตัวเอง แบบไม่ข้ามสถาปัตยกรรม มันจะ compile 3 ครั้ง
      1. ใช้ stage2 compile ตัวเองจาก source code เรียกว่า stage3.1
      2. ใช้ stage3.1 compile ตัวเองอีก 2 ครั้ง เรียกว่า stage3.2 และ stage3.3
      3. ตรวจสอบว่า stage3.2 = stage3.3 เพื่อทดสอบว่า compiler ทำงานได้ถูกต้อง
      4. ใช้ stage3.3 เป็นผลลัพท์ stage3

สรุปแล้วเราก็พอเข้าใจว่าถ้าสร้างชิพใหม่ขึ้นมาเราจะเอา compiler มาจากไหน แต่ compiler ตัวแรกมาจากไหน…? ก่อนจะเล่าต่อไป ขอไปเล่าเรื่องอื่นก่อนแล้วกัน

Why does this matter

Ken Thompson ผู้สร้างระบบปฏิบัติการ Unix และภาษา Go เคยตีพิมพ์ paper เรื่อง Reflection on trusting trust (1984) ว่าคุณจะรู้ได้อย่างไรว่า compiler ที่คุณใช้ไม่มี backdoor จริง

สมมุติว่ามี compiler ตัวหนึ่งซึ่งมันจะ detect source code pattern อย่างหนึ่งแล้วแทรก backdoor ลงไป และ detect source code ตัวเองเพื่อแทรกโค้ดตัวมันเองเข้าไป ถ้าเรา compile compiler ตัวนี้แล้วก็จะทำให้ backdoor ฝังอยู่ใน compiler ซึ่ง compile compiler ใหม่ก็ไม่หาย แต่ตรวจสอบหา backdoor ใน source code ไม่พบ ถ้าอย่างนั้นแล้วคุณจะแน่ใจได้อย่างไร ว่าระบบที่ใช้งานอยู่ไม่มี backdoor

ปรากฏว่ามีผู้พบว่า Ken Thompson เคยโจมตีด้วยท่านี้จริง โดยเขาเล่าในปี 1995 ว่าหลายสิบปีก่อนเขาสร้าง compiler แบบนี้จริงแล้วส่งให้แผนก UNIX support ติดตั้ง binary เข้าไปในระบบโดยอ้างว่ามีฟีเจอร์ใหม่ที่ไม่สามารถใช้ compiler เก่า compile source code ใหม่ได้ ใน compiler ใหม่นี้มีการฝัง backdoor ของโปรแกรม login ไว้

ต่อมามีผู้พบว่า symbol table (function list) ของ compiler มันแปลกๆ ก็เลยสั่งให้ compiler print assembly ออกมาซึ่งระบบแทรก backdoor ไม่ได้เขียนไว้รองรับคำสั่งนี้ แล้วเอา assembly ไปแปลงเป็น machine code ทำให้ backdoor หายไป

ในปัจจุบันจึงเป็นคำถามว่าถ้าหากเรามี backdoor ที่ซับซ้อนกว่าที่ Ken เคยสร้างไว้จริง เราจะมั่นใจได้อย่างไรว่าระบบคอมพิวเตอร์มีความปลอดภัยเพราะถึงแม้จะอ่านโค้ดทุกบรรทัดก็ไม่ได้แปลว่าจะเป็นโค้ดทั้งหมดของโปรแกรม

Go

Compiler ของภาษา Go เขียนขึ้นด้วยภาษา C ในตอนแรก จากนั้นถูกใช้เครื่องมือแปลงภาษา C เป็น Go ภายหลัง ทำให้ Go compiler ในปัจจุบันเขียนด้วยภาษา Go ดังนั้นทีมงาน Go จึงแนะนำวิธีสร้าง Go compiler ดังนี้

  1. ดาวน์โหลดซอร์สโค้ด Go 1.4 ซึ่งเป็นรุ่นสุดท้ายที่เขียนด้วยภาษา C
  2. Compile Go 1.4
  3. Compile Go 1.17.13 ด้วย Go 1.4
  4. Compile Go 1.20
  5. Compile Go รุ่นต่อๆ ไป โดยทีมงาน Go กำหนดว่า minimum compiler version ที่ใช้ compile รุ่นล่าสุดได้คือ version ที่ออกเมื่อประมาณ 1 ปีที่แล้ว

อีกวิธีหนึ่งที่ทำได้คือมีอีกโปรแกรมที่ compile ภาษา Go ได้นั่นคือ gccgo ซึ่งเขียนด้วยภาษา C และรองรับโค้ด Go ในระดับหนึ่ง สามารถใช้ gccgo compile Go รุ่นใหม่ได้เลย

Reproducible builds

ในปัจจุบัน Linux distribution หลายตัวเข้าร่วมโครงการ Reproducible builds ซึ่งเป็นอีกวิธีหนึ่งที่พอจะแก้ปัญหาความปลอดภัยด้านบนได้บ้าง โดย Linux distro จะทำให้ผลลัพท์ของการสร้าง package นั้นสามารถทำซ้ำได้ไฟล์เดียวกัน 100% ซึ่งใครก็สามารถทำซ้ำ ตรวจสอบได้ตลอดเวลาเพื่อยืนยันว่า package นั้นเกิดจาก source code จริงๆ เพราะ Linux บางตัวไม่มีระบบ CI/CD กลางเนื่องจากเป็นค่าใช้จ่าย แต่ให้ผู้สร้างแพคเกจ compile บนเครื่องตัวเอง เซ็นแล้วอัพโหลดไปแจกจ่าย

ขณะที่เขียนนี้ Package ทั้งหมดของ Linux ต่อไปนี้สามารถทำซ้ำ ตรวจสอบได้ด้วยตนเอง

  • Arch Linux 78.5%
  • Debian amd64 90.8%
  • openSUSE 94%

รวมถึง Go compiler 1.21 ด้วยที่ตัวที่ให้โหลดในหน้าเว็บ สามารถทำซ้ำได้ด้วยตนเอง

ฟังดูเหมือนว่าง่ายๆ ว่าโค้ดเดิมก็ควรจะได้ผลลัพท์เดิมเสมอ แต่ในความเป็นจริงแล้วอาจจะมีปัจจัยต่างๆ ที่ทำให้ได้ผลลัพท์ต่างกันไป เช่น

  • File metadata ไม่ตรงกัน ทำให้เวลาสร้าง/แตก zip แล้วไม่ตรง เช่น ชื่อเจ้าของไฟล์ สิทธิ์ หรือเวลาสร้างไฟล์
  • สถาปัตยกรรมไม่ตรงกัน เช่น compile ครั้งแรกใช้เครื่อง 32 bit ต่อมาใช้เครื่อง 64 bit แต่ compile เป็นโปรแกรม 32 bit ทั้งคู่ อาจจะได้ผลลัพท์ต่างกันเพราะมีการบันทึกค่าไว้
  • มีการฝังวันเวลาที่ compile เข้าไปในโปรแกรม (เช่นคำสั่ง version/about) ทำให้ได้ผลลัพท์ไม่ตรงกัน ซึ่งต้องลบโค้ดออกหรือกำหนดเป็นวันเวลาที่ fix ไว้
  • มีการฝัง path ที่ compile เข้าไปในโปรแกรม (เช่นใน stack trace เวลา crash) เวลาทำซ้ำอาจจะทำที่ path อื่น หรือระบุ path คนละแบบกัน (absolute/relative) ซึ่งจะต้องบันทึก path ไว้หรือให้ compiler normalize path ได้
  • มีการฝังข้อมูลเครื่องที่ compile เข้าไปในโปรแกรม เช่น username, hostname, timezone, language
  • Library ที่ใช้ไม่ตรงกัน เช่น มีการใช้ library ในเครื่องที่ไม่แจ้งไว้ พอคนอื่นไป compile แล้วหาไม่เจอ, ใช้ version ไม่ตรงกัน, compiler คนละตัวกัน
  • ในโค้ดมีการสุ่ม เช่นอ่านข้อมูลจาก filesystem หรือ HashMap มาแล้วไม่ได้ sort แต่ละครั้งจึงได้ลำดับสลับกัน

ดังนั้นผู้สร้างแพคเกจจะต้องตรวจหาปัญหาเหล่านี้และแก้ไขให้เรียบร้อย ซึ่งบางครั้ง compiler เองก็อาจจะเป็นที่มาของปัญหาเหล่านี้ได้เช่นกัน ไม่ใช่เฉพาะแค่ใน source code

เนื่องจาก Linux หลายตัวสามารถสร้างได้จาก source code อยู่แล้ว (ถึงอาจจะไม่ได้เท่ากันทุก bytes) ดังนั้นบริษัทใหญ่ๆ หลายที่จึงสร้าง Linux ของตัวเองซึ่งโปรแกรมส่วนมากก็เอามาจาก Linux อื่นๆ แต่ compile เองจะได้ไม่ต้องไว้ใจคนอื่น และอาจจะ modify ตามที่ตัวเองสนใจได้ด้วย เช่น

Guix Bootstrap

ที่เล่าไปด้านบนก็คือวิธีบริหารความเสี่ยงที่ใช้กันทั่วไปว่า Linux ที่ใช้งานอยู่นั้นเชื่อถือได้ แต่ยังอยู่บนข้อจำกัดว่าระบบที่ใช้งานอยู่เชื่อถือได้ และ C compiler ปัจจุบันเชื่อถือได้ ถ้าเราต้องการ C compiler ที่เชื่อถือได้จะทำอย่างไรดี

Guix เป็น Linux distribution ของโครงการ GNU ซึ่งมองว่าระบบ Linux นั้นสามารถ reproducible ได้จาก source code โดยขั้นตอนการ reproduce ก็เป็น source code เช่นเดียวกันซึ่งเขียนด้วยภาษา Scheme การติดตั้งแพคเกจต่างๆ ก็คือให้มัน reproduce build ของโปรแกรมนั้นๆ ขึ้นมา

ในขณะนี้ Guix ใช้โครงการ bootstrap-seeds เป็นจุดเริ่มต้น โดย bootstrap-seed ทำงานดังนี้

  1. กำหนดไฟล์ hex0 เป็นการแสดงเลขฐาน 2 ในรูปแบบเลขฐาน 16 (เช่นในไฟล์เขียนว่าว่า F0 ให้ output 11110000) และรองรับการใส่ comment
  2. สร้างโปรแกรมสำหรับแปลงไฟล์ hex0 ซึ่งเขียนด้วย machine code ของเครื่อง x86 ในรูปแบบไฟล์ hex0 โดย Guix จะใช้ไฟล์ hex0-seed ขนาด 357 bytes ที่แปลงมาสำเร็จรูปแล้ว แต่เราจะแปลงเองด้วยมือก็ได้
  3. Compile โปรแกรม hex1 ซึ่งเขียนด้วย hex0 โดย hex1 เป็นภาษาที่ปรับปรุงขึ้นมาจาก hex0 สามารถใช้ label สำหรับ jump ได้ (ก็คือต้องสามารถแทรก relative offset ของจุดที่แปะ label ไว้ในไฟล์จากจุดปัจจุบันได้)
  4. Compile โปรแกรม hex2 ซึ่งเขียนด้วย hex1 โดย hex2 จะเพิ่มความสามารถที่ label มีหลายตัวอักษรได้และสามารถหาตำแหน่งแบบ absolute ของ label ได้
  5. Compile โปรแกรม M0 ซึ่งเขียนด้วย hex2 ซึ่งสามารถกำหนด macro ได้ (ชุดคำสั่งที่ให้พิมพ์ซ้ำ)
  6. Compile โปรแกรม cc ซึ่งเขียนด้วย M0 เป็น C compiler แบบง่ายๆ ที่ใช้ชุดคำสั่งได้จำกัด
  7. Compile โปรแกรม M2-Planet ซึ่งเขียนด้วยภาษา C เท่าที่โปรแกรม cc รองรับ เป็น C compiler ที่รองรับชุดคำสั่งได้มากขึ้น
  8. Compile โปรแกรม GNU Mes ซึ่งเป็น C compiler และ interpreter ของภาษา Scheme (ที่ Guix ใช้) โดยสามารถคอมไพล์ได้จาก M2-Planet
  9. Compile โปรแกรม TinyCC (fork) ซึ่งสามารถใช้ compile GCC และไลบรารีอื่นๆ ที่ใช้งานใน Linux ปกติได้

(ในนี้ไม่รวมถึง tool อื่นๆ ที่ใช้ประกอบการรัน tool ข้างบน เช่น cat, shell, debug tool, linker, C standard library เป็นต้น)

หลังจากเรามี GCC และ library อื่นๆ แล้วก็สามารถ compile โปรแกรมอื่นๆ ไปเรื่อยๆ จนถึงโปรแกรมที่เราต้องการได้ เช่น Python interpreter โดยถ้าเราเชื่อว่า source code ทั้งหมดที่ใช้น่าเชื่อถือ ไม่มี backdoor แล้วกระบวนการนี้ก็ทำให้เรามั่นใจได้ว่าสามารถสร้างระบบ Linux ขึ้นมาได้โดยไม่ต้องใช้ compiler ตั้งต้น

ในปัจจุบันข้อจำกัดของระบบนี้คือต้องเชื่อได้ว่า Kernel ที่รันอยู่น่าเชื่อถือ เพราะเรารัน hex0 บน Kernel ปัจจุบัน ในอนาคตทีมงาน bootstrappable.org มีความคิดที่จะพัฒนา CPU architecture “Knight” ซึ่งสามารถออกแบบเป็นวงจร FPGA ได้เพื่อใช้สร้าง hex0 โดยไม่ต้องใช้คอมพิวเตอร์ และ builder-hex0 ที่เป็น OS พื้นฐานสามารถรัน hex0 ได้ในตัว

The original C compiler

แล้ว C compiler ตัวแรกสร้างมาจากไหน?

Dennis Richie (RIP) เขียนบันทึกไว้ว่า UNIX ตัวแรกถูกสร้างขึ้นโดย Ken Thompson (จำชื่อนี้ได้ไหม) ในปี 1968 โดยใช้โปรแกรม assembler (คล้ายๆ M0) ของเครื่อง GE-635 สร้างแถบกระดาษสำหรับเครื่อง PDP-7 จนมีโปรแกรมพื้นฐานพร้อมใช้งาน ได้แก่ Kernel, editor, shell, คำสั่ง rm, cat, cp และ assembler จากนั้นก็เริ่มพัฒนาบนเครื่อง PDP-7 ต่อ

ในปีต่อมา Doug McIlroy สร้างภาษา TMG (TransMoGrifiers) สำหรับ UNIX บน PDP-7 ขึ้นมาเป็นภาษาโปรแกรมระดับสูงตัวแรก แล้ว Ken ก็สร้างภาษา B ขึ้นโดยเขียนในภาษา TMG โดยอ้างอิงแบบมาจากภาษา BCPL ของ Martin Richards หลังจากสร้างขึ้นสำเร็จก็ได้เขียนภาษา B ใหม่อีกครั้งหนึ่งในภาษา B เอง

ในปี 1971 Dennis Richie พบว่าภาษา B เริ่มตามไม่ทันเครื่องคอมพิวเตอร์ที่อัพเกรดเป็นรุ่น PDP-11 จึงปรับปรุงภาษาขึ้นเป็นภาษา NB (New B) พร้อมกับคอมไพเลอร์ตัวใหม่ ซึ่งต่อมาก็ได้เปลี่ยนชื่อเป็น C

สำหรับ GCC ผมยังไม่เห็นประวัติว่าใช้ compiler ใดสร้างขึ้น แต่โปรแกรมส่วนมากของโครงการ GNU ถูกสร้างขึ้นบนเครื่อง UNIX ก็เป็นไปได้ว่าอาจจะใช้ C compiler ของ Dennis Richie