JavaScript interpreter ใน YouTube-dl

ปกติแล้ว YouTube จะป้องกันไม่ให้ผู้ใช้ดาวน์โหลดวิดีโอบน YouTube มาเก็บไว้ในเครื่องตัวเอง โดยใช้วิธีการป้องกันหลายอย่าง แต่ก็มีโปรแกรมและ Browser Extension หลายตัวที่สามารถดาวน์โหลดได้

หนึ่งในบรรดาโปรแกรมที่สามารถดาวน์โหลดวิดีโอจาก YouTube ได้ดีคือ YouTube-dl ซึ่งเป็นโปรแกรม Opensource ที่ดูแลโดย Electronic Frontier Foundation ซึ่งเป็นมูลนิธิที่ไม่หวังผลประโยชน์ ที่ให้การสนับสนุนในเรื่อง Digital Privacy และ Free Speech

ในปี 2020 มีกรณีใหญ่เกิดขึ้น คือ สมาคมอุตสาหกรรมแผ่นเสียงแห่งอเมริกา (The Recording Industry Association of America, Inc.) หรือเรียกย่อว่า RIAA ได้ใช้กฎหมาย DMCA (Digital Millennium Copyright Act) ซึ่งเป็นกฎหมายลิขสิทธิ์ของสหรัฐอเมริกาที่ผ่านออกมาในเดือนตุลาคม 1998 ร้องขอให้ GigHub นำ source code ของ YouTube-dl ออกจาก GitHub ซึ่งทาง GitHub ก็ดำเนินการตามคำร้องในทันที

การดาวน์โหลดวิดีโอจาก YouTube ในด้านหนึ่งถือเป็นการละเมิดลิขสิทธิ์ตามที่ RIAA ได้แจ้งต่อ YouTube แต่ในอีกหลายกรณี การดาวน์โหลดวิดีโอก็ไม่ได้เกี่ยวข้องกับลิขสิทธิ์ภายใต้ RIAA และข้อที่ถกเถียงกันมากคือ การดาวน์โหลดวิดีโอจาก YouTube เป็นการละเมิดลิขสิทธิ์หรือไม่ และในแง่มุมของนักพัฒนาคิดว่าเรื่องนี้ GitHub ทำเกินเลยไป ยิ่งตอนนั้นนักพัฒนากำลังหมั่นไส้ที่ Microsoft ซื้อ GitHub ไปก็พากันโกรธ หาว่านี่แหละทุนนิยมครอบงำอิสระของวงการ Opensource ไปโน่นเลย

หลังจากนั้นนักพัฒนาที่มี source code ของ YouTube-dl อยู่ในมือก็พากันอัพโหลด source code ขึ้น GitHub กันขนานใหญ่ GitHub ก็ไล่ลบ จนลบไม่ไหว ก็ออกมาประกาศว่าใครอัพโหลดอีกจะปิดบัญชี GitHub ซึ่งก็เหมือนเติมเชื้อเพลิงลงไปในกองไฟ

มูลนิธิ Electronic Frontier Foundation ที่ดูแล YouTube-dl อยู่ก็เลยออกจดหมายเปิดผนึกอธิบายเรื่องนี้ว่า การดาวน์โหลดวิดีโอ YouTube มันไม่ใช่เรื่องการดาวน์โหลดเพลงละเมิดลิขสิทธิ์ไปทั้งหมด มีกรณีอีกมากมาย เช่นวงการวิจัยที่ต้องการเก็บวิดีโอไว้เป็นแหล่งอ้างอิง วงการศึกษาที่ต้องใช้วิดีโอแบบ Offline ไปจนถึงกรณีอื่นๆอีกมากมาย

และแก้ข้อกล่าวหาของ RIAA ที่ว่า YouTube-dl มีความตั้งใจในการละเมิดลิขสิทธิ์เพราะ Test-case ตัวหนึ่งของโครงการใช้เพลงที่มีลิขสิทธิ์มาเป็นตัวอย่างการ test เรื่องนี้ก็ถกเถียงกันมาก EFF ก็เลยถอดตัวเทสตัวนี้ออก

แต่ส่วนที่สำคัญที่สุดคือกระบวนการป้องกันการดาวน์โหลดของ YouTube เป็นยังไง และ YouTube-dl ทำอะไรที่เป็นการฝ่าฝืนกฎหมายหรือไม่ ตอนแรกคนเข้าใจว่า YouTube เข้ารหัสวิดีโอไว้ และ YouTube-dl นั้นเข้าไปถอดรหัสของ YouTube Video ซึ่งถ้าเป็นอย่างนั้นก็ผิดเต็มๆ แต่เรื่องนี้ EFF อธิบายการทำงานของ YouTube เป็นภาษาชาวบ้านได้อย่างน่าสนใจ

EFF บอกว่า YouTube-dl ไม่ได้ถอดรหัสอะไรเลย ไม่ได้เข้าไปยุ่งกับวิดีโอที่มีการเข้ารหัสที่ใช้ Digital Right Management (DRM) ใน commercial video ใดๆเลย (เช่นที่ใช้ใน NetFlix)

การป้องกันการดาวน์โหลดของ YouTube ใช้กระบวนการที่ Google เรียกว่า Signature คือเมื่อผู้ใช้เรียกดูวิดีโอ server ของ YouTube จะส่งโปรแกรม JavaScript เล็กๆมาตัวนึง ให้ player บน browser สั่งให้ทำงาน แล้วก็จะได้ URL ของ video stream ออกมา ใครๆ (โปรแกรมเมอร์) ก็สามารถเรียกดู JavaScript source code นี้ได้ และมันก็ไม่ได้เป็นความลับอะไร และ Video Stream ของ YouTube ก็ไม่ได้เข้ารหัสอะไร YouTube-dl แค่เลียนแบบการทำงานของ Browser แค่นั้น เพียงแต่ไม่ได้แสดงวิดีโอ แต่ save วิดีโอไว้ ก็เท่านั้น

EFF ยังกลัวว่าไมโครซอฟต์หรือ GitHub จะทำมึนไม่เข้าใจ ก็เลยอธิบายต่ออีกว่า ก็เหมือนกับบ้านหลังนึงที่ใช้วิธีล็อกด้วยรหัสเสียง ติดป้ายไว้หน้าบ้านว่าถ้าจะเปิดประตูให้ตะโกนว่า “เพื่อน” ประตูก็จะเปิด เราก็แค่ตะโกนตามนั้น ประตูก็เปิด จะมาหาว่าเป็นขโมยบุกเข้าบ้านได้ไง

GitHub จนแต้มและนักพัฒนาก็กระหน่ำหนักเรื่องราวลามปามใหญ่โตขึ้นเรื่อยๆ ในที่สุด GitHub ก็บอกว่า “มีหลักฐานใหม่” กรณีของ YouTube-dl นั้น พิจารณาใหม่แล้วไม่ผิด เอา YouTube-dl ขึ้นให้เหมือนเดิมแล้ว… เรื่องนี้ก็เลยจบลง

ทีนี้มาดูว่า YouTube-dl เป็นโปรแกรม Python แล้วมัน execute JavaScript ได้ไง เมื่อเช้านี้ก็มีทวีตเรื่องนี้ออกมาจากผู้ใช้ชื่อ Zhuowei Zhang ว่าใน YouTube-dl มี source code ที่ทำเป็น JavaScript interpreter ด้วย code Python ขนาดแค่ 870 บรรทัดเอง

เรื่องนี้ก็เลยเป็นหัวข้อถกเถียงกันใน Hacker News กันขนานใหญ่ เพราะงานนี้น่าจะเอาไปต่อยอดทำอะไรได้มากมาย เพราะขนาดมันเล็กมาก

ผมตามเข้าไปดู source code ส่วนนี้ (ลิงค์) จะเห็นว่าเป็น JavaScript (subset) interpreter ที่เล็กมาก น่าสนใจทีเดียว แต่ตัวที่อยู่ใน YouTube-dl นี้จำกัดคำสั่งมากๆ มีเท่าที่จำเป็นที่ใช้ในการหา Signature ของ YourTube เท่านั้น แต่ก็เป็นจุดเริ่มต้นที่ดีถ้าใครอยากหาตัวอย่าง JavaScript interpreter ที่ทำด้วย Python มาศึกษาดู

ตอนนี้ YouTube-dl เป็นที่รู้จักกันทั่วไป แถมมี alternative ตามออกมาเป็นพรวน การโวยวายของ RIAA ส่งผลในทางตรงข้ามอย่างสิ้นเชิง ตอนนี้มีโปรแกรมดาวน์โหลด YouTube Video ให้เลือกใช้มากกว่าตอนก่อนเกิดเรื่องหลายเท่าตัว และ GitHub ก็คงไม่ทำอะไรแล้วเพราะน่าจะเข็ด….