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

November 19, 2025

ในโลกของ 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 ก็ยิ่งง่ายขึ้นเท่านั้น

บทความล่าสุด

Ready to talk about your project?

Share goals and constraints. We'll assemble architects and engineers to move fast with you.

Get in touch