Upstream, Downstream และ Fork คืออะไร? คู่มือเข้าใจง่ายสำหรับนักพัฒนา Android & Linux

ในโลกของ Android และ Linux มีโค้ดจำนวนมหาศาลที่ไหลผ่านนักพัฒนา, Google, ชุมชนโอเพ่นซอร์ส, ผู้ผลิตชิป (SoC vendor), และผู้ผลิตสมาร์ทโฟน (OEM)
การจะเข้าใจโครงสร้างระบบนิเวศนี้ได้ คุณต้องเข้าใจคำสำคัญ 3 คำ:

🔹 Upstream
🔹 Downstream
🔹 Fork

คำเหล่านี้อธิบายว่า “โค้ดไหลอย่างไร” จากแหล่งต้นทาง ไปยังเวอร์ชันของ vendor และเวอร์ชันที่แตกแขนงออกมา (fork) โดยเฉพาะในระบบ Android Kernel ที่มีการ patch ต่อ ๆ กันหลายชั้น

บทความนี้จะอธิบายแบบชัดเจน พร้อมตัวอย่างจริงใน Android และ Linux


🟦 1. Upstream คืออะไร? (ต้นฉบับหลัก / แหล่งจริง)

Upstream คือ แหล่งโค้ดต้นฉบับที่เป็นทางการ
เป็นที่ที่โค้ดถูกพัฒนาแก้ไขโดย “ผู้ดูแลหลัก” (official maintainers)

✔ ตัวอย่าง Upstream ใน Android / Linux

  • Linux Mainline Kernel (โดย Linus Torvalds)
  • AOSP (Android Open Source Project)
    https://android.googlesource.com/
  • Android Common Kernel
  • โค้ด canonical เช่น:
    drivers/staging/android/ion/
    kernel/binder/

ทำไม Upstream สำคัญ?

  • เสถียรที่สุด
  • ผ่านการรีวิวอย่างจริงจัง
  • Patch ความปลอดภัยออกที่นี่ก่อน
  • เป็น “เวอร์ชันอ้างอิง” ที่ทุกคนควรตาม

Upstream = Source of Truth (ความจริงต้นทาง)


🟧 2. Downstream คืออะไร? (โค้ดที่ต่อยอดจาก Upstream)

Downstream คือโค้ดที่ถูกดึงมาจาก Upstream แล้วถูก “ปรับแต่ง / เพิ่มฟีเจอร์” โดย vendor หรือนักพัฒนา

ตัวอย่าง Downstream:

  • Kernel ของ Qualcomm / MediaTek / Exynos
  • Kernel ของ Samsung, Xiaomi, OPPO, Vivo
  • ROM ของผู้ให้บริการ (carrier)
  • Android เวอร์ชันเฉพาะอุปกรณ์

Downstream มักมี:

  • Driver ฮาร์ดแวร์
  • โค้ดเฉพาะ SoC
  • ส่วนควบคุมพลังงาน
  • การปรับแต่ง vendor
  • โค้ดพิเศษที่ ไม่เคยกลับไป upstream

Downstream มัก แตกแขนงจากต้นทางมากขึ้นเรื่อย ๆ ทำให้รวม patch กลับมา upstream ยากขึ้น


🟥 3. Fork คืออะไร? (สำเนาที่แตกสายการพัฒนา)

Fork เกิดเมื่อโค้ดถูกคัดลอกจาก Upstream หรือ Downstream แล้วพัฒนาแยกออกไปเป็นเส้นทางของตนเอง

Fork = สำเนาที่พัฒนาแยกทาง

ตัวอย่าง Fork

  • LineageOS (fork ของ AOSP)
  • Kernel ของ custom ROM ต่าง ๆ
  • GitHub mirror ของ AOSP
  • นักพัฒนาคัด AOSP ไปแก้เองบน repo ส่วนตัว

Fork อาจ:

  • ไม่ sync กับ upstream อีกต่อไป
  • ผิด compatibility
  • เกิด merge conflict จำนวนมาก
  • กลายเป็นโปรเจคใหม่ไปเลย

Fork = เส้นทางพัฒนาใหม่ที่อาจไม่เกี่ยวกับต้นฉบับแล้ว


🗺 4. แผนผังการไหลของโค้ดในระบบ Android Kernel

นี่คือการไหลของโค้ดจริงในอุตสาหกรรม:

Linux Mainline (Upstream)
       │
       ▼
Android Common Kernel (Upstream)
       │
       ▼
SoC Vendor Kernel (Downstream)
(Qualcomm / MediaTek / Exynos / Google Tensor)
       │
       ▼
OEM Device Kernel (Downstream)
(Samsung / Xiaomi / Oppo / Pixel)
       │
       ▼
Custom ROM Kernels (Forks)
(LineageOS, PixelExperience, etc.)

ตัวอย่างจริง: PMEM และ ION

จากตารางที่คุณส่งมา:

  • Google Source (เก่า)
    drivers/gpu/ion/*
  • Canonical Upstream Source (ปัจจุบัน)
    drivers/staging/android/ion/*
  • Exposed เป็นอุปกรณ์
    /dev/ion

Upstream คือเวอร์ชันอ้างอิง
Downstream คือเวอร์ชันที่ vendor ดัดแปลง


🧩 5. ทำไมต้องแยก Upstream / Downstream / Fork?

✔ Upstream = เสถียร ปลอดภัย ดูแลง่าย

  • patch ความปลอดภัยมาก่อน
  • โค้ดผ่านการตรวจสอบมากที่สุด
  • ใช้แก้ bug อ้างอิงได้ดีที่สุด

✔ Downstream = แตกแขนง + แก้เฉพาะอุปกรณ์

  • เพิ่ม driver
  • ดัดแปลงตาม hardware
  • มักไม่ merge กลับ upstream
  • ยิ่งเวลาผ่านนานยิ่งรวมโค้ดยาก

✔ Fork = ยืดหยุ่น แต่เสี่ยง divergence

  • พัฒนาอิสระได้
  • แต่ตกยุคง่าย
  • มี technical debt สูง

ถ้าคุณเข้าใจทิศทางนี้ จะเข้าใจว่า:

  • ทำไม Vendor kernel มัก “รก”
  • ทำไม Patch upstream รวมยาก
  • ทำไม Google ดัน GKI เพื่อลด fragmentation

💡 สรุปแบบง่ายที่สุด

คำศัพท์ ความหมาย
Upstream โค้ดต้นฉบับทางการ (ต้นทาง)
Downstream โค้ดที่พัฒนาต่อยอดจากต้นทาง
Fork สำเนาโค้ดที่แยกพัฒนาอย่างอิสระ

หรือแบบเปรียบเทียบ:

  • Upstream = สูตรอาหารต้นตำรับ
  • Downstream = ร้านอาหารดัดแปลงสูตร
  • Fork = คนเอาสูตรไปทำอาหารแนวใหม่

🏁 บทสรุป

การเข้าใจ Upstream / Downstream / Fork เป็นเรื่องสำคัญมากสำหรับ:

  • นักพัฒนา Android Kernel
  • Linux driver engineer
  • Embedded engineer
  • Custom ROM developer
  • คนที่ทำงานกับ AOSP

เพราะมันคือกุญแจสำคัญในการ:

  • debug kernel
  • หา source ที่ถูกต้อง
  • เข้าใจการ patch
  • จัดการ fragmentation

ยิ่ง codebase อยู่ใกล้ upstream เท่าไหร่ การ maintain ก็ยิ่งง่ายขึ้นเท่านั้น


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products