ภาษา configuration ใหม่ที่เรียกว่า KSON ได้เข้าสู่ช่วง public beta แล้ว โดยมุ่งหวังที่จะปฏิบัติต่อไฟล์ configuration เหมือนกับ user interface มากกว่าการเป็นเพียงรูปแบบข้อมูลธรรมดา แม้ว่าโปรเจกต์นี้จะมีเป้าหมายเพื่อแก้ไขปัญหาทั่วไปของ YAML และ JSON แต่ feedback จากชุมชนในระยะแรกเผยให้เห็นความกังวลที่สำคัญเกี่ยวกับความเสี่ยงด้านความปลอดภัยและความคลุมเครือของไวยากรณ์
การรองรับแพลตฟอร์ม KSON
- ภาษาที่รองรับ: JavaScript/TypeScript, Python, Rust, JVM, Kotlin Multiplatform
- การรองรับ IDE: VS Code, JetBrains IDEs, โปรแกรมแก้ไขที่รองรับ LSP
- การรองรับสถาปัตยกรรม: Windows/Linux/macOS บน x86_64/arm64 เท่านั้น
- ขนาดไลบรารี: 2MB เมื่อคอมไพล์แล้ว
- การใช้งาน: โค้ดเบส Kotlin เดียวพร้อมการเชื่อมโยงภาษา
ความเสี่ยงด้าน Supply Chain Security ส่งสัญญาณเตือนภัย
ความกังวลที่ร้ายแรงที่สุดมุ่งเน้นไปที่สถาปัตยกรรมการใช้งานของ KSON ภาษานี้ถูกสร้างขึ้นทั้งหมดใน Kotlin โดยที่ language binding อื่นๆ เพียงแค่เชื่อมโยงไปยังเวอร์ชัน Kotlin นี่ทำให้เกิดกระบวนการ build ที่ซับซ้อนซึ่งดาวน์โหลด precompiled library จาก GitHub โดยไม่มีการตรวจสอบ hash ระบบ build ยังดาวน์โหลด binary ขนาดใหญ่โดยอัตโนมัติ รวมถึง OpenJDK, pixi และ GraalVM ในระหว่างการ compilation
สำหรับองค์กรที่ใช้ระบบ JVM-based อยู่แล้ว แนวทางนี้อาจจะยอมรับได้ อย่างไรก็ตาม สำหรับโปรเจกต์ใน ecosystem อื่นๆ โดยเฉพาะอย่างยิ่งที่มีข้อกำหนดด้านความปลอดภัยที่เข้มงวด แนวทางนี้จะนำความเสี่ยงด้าน supply chain ที่มากมายเข้ามา การดาวน์โหลด binary ที่ไม่ได้รับการตรวจสอบโดยอัตโนมัตินั้นขัดต่อแนวปฏิบัติด้านความปลอดภัยสมัยใหม่
ข้อกังวลด้านความปลอดภัยที่สำคัญ
- ดาวน์โหลดไลบรารีที่คอมไพล์แล้วจาก GitHub โดยไม่มีการตรวจสอบแฮช
- กระบวนการ build ดาวน์โหลด OpenJDK, pixi และ GraalVM binaries โดยอัตโนมัติ
- ไม่มี native implementations ที่พร้อมใช้งานนอกเหนือจากระบบนิเวศ JVM
- การสนับสนุน cross-compilation ที่จำกัด
- ความเสี่ยงจากการโจมตี supply chain สำหรับโปรเจกต์ที่ไม่ใช่ JVM
การจัดการ Whitespace สร้างปัญหาใหม่
KSON โปรโมตตัวเองว่าไม่มีความไวต่อ whitespace เพื่อหลีกเลี่ยงปัญหา indentation ที่มีชื่อเสียงของ YAML อย่างไรก็ตาม การเลือกออกแบบนี้กลับนำปัญหาชุดใหม่เข้ามา การทดสอบจากชุมชนเผยให้เห็นว่า indentation ที่ทำให้เข้าใจผิดสามารถสร้างผลลัพธ์การ parsing ที่สับสนซึ่งไม่ตรงกับความคาดหวังทางสายตา
ตัวอย่างหนึ่งแสดงให้เห็นว่า port configuration ที่ดูเหมือนง่ายๆ สามารถ parse เป็นโครงสร้างที่ซ้อนกันอย่างไม่คาดคิด โดยที่ค่าบางอย่างกลายเป็น array เมื่อไม่ได้ตั้งใจให้เป็นเช่นนั้น แม้ว่า KSON จะรวม warning สำหรับ misleading indentation และ auto-formatter แต่นักวิจารณ์โต้แย้งว่าการป้องกันปัญหาเหล่านี้ทั้งหมดจะดีกว่าการเตือนเกี่ยวกับปัญหาหลังเกิดขึ้นแล้ว
การตอบรับที่หลากหลายสำหรับปรัชญา UI-Centric
แนวคิดหลักเบื้องหลัง KSON - การปฏิบัติต่อ configuration เหมือนกับการออกแบบ user interface - ได้จุดประกายการอภิปรายที่น่าสนใจ ภาษานี้รวมฟีเจอร์ขั้นสูงเช่น embedded SQL พร้อม syntax highlighting, การสนับสนุน JSON Schema แบบ native และการรวม IDE ที่ครอบคลุมทั้ง VS Code และแพลตฟอร์ม JetBrains
นักพัฒนาบางคนชื่นชมแนวทางนี้ โดยเฉพาะอย่างยิ่งความสามารถในการฝังภาษาต่างๆ ภายในไฟล์ configuration ในขณะที่ยังคงรักษา syntax highlighting และ validation ที่เหมาะสม คนอื่นๆ กังวลว่าการผสม code และ configuration จะละเมิดหลักการสถาปัตยกรรมซอฟต์แวร์ที่ดี
Configuration เป็นเรื่องยาก tooling ไม่ค่อยเป็นปัญหา (อย่างน้อยจากประสบการณ์ของผม)
แนวทางทางเลือกได้รับความสนใจ
การอภิปรายเรื่อง KSON ได้เน้นย้ำแนวทางทางเลือกต่างๆ สำหรับการจัดการ configuration นักพัฒนาบางคนสนับสนุนการใช้ภาษาโปรแกรมมิ่งจริงๆ เช่น Python หรือ TypeScript สำหรับ configuration โดยโต้แย้งว่านี่ให้ tooling และ type safety ที่ดีกว่า คนอื่นๆ ชี้ไปที่โซลูชันที่มีอยู่แล้วเช่น JSON5, KDL หรือ Dhall ในฐานะทางเลือกที่มีความเป็นผู้ใหญ่มากกว่า
ผู้แสดงความคิดเห็นหลายคนสังเกตว่าความท้าทายพื้นฐานไม่ใช่ไวยากรณ์ของไฟล์ configuration แต่เป็นโครงสร้างและการตั้งชื่อของตัวเลือก configuration เอง ชื่อฟิลด์ที่ชัดเจนและการตรวจสอบข้อมูลที่เหมาะสมมักจะสำคัญกว่ารูปแบบไฟล์พื้นฐาน
การเปรียบเทียบ KSON กับทางเลือกอื่น
- KSON: เป็น superset ของ JSON รองรับภาษาที่ฝังตัว มีการรวมเข้ากับ IDE ไม่ต้องคำนึงถึง whitespace
- YAML: ได้รับการยอมรับอย่างแพร่หลาย ต้องคำนึงถึง whitespace มักเกิดข้อผิดพลาดในการแยกวิเคราะห์
- JSON5: เป็น superset ของ JSON รองรับ comments ง่ายกว่า KSON
- TOML: มี syntax ที่เรียบง่าย ความสามารถในการซ้อนชั้นมีจำกัด
- KDL: มีโมเดลข้อมูลแบบ XML ไม่เข้ากันได้กับ JSON
- Dhall: เป็นภาษาเชิงฟังก์ชัน มี strong typing แต่มีเส้นโค้งการเรียนรู้ที่สูงชัน
ช่องว่างในการใช้งานจำกัดการยอมรับ
นอกเหนือจากความกังวลด้านความปลอดภัย KSON ปัจจุบันมีการสนับสนุนแพลตฟอร์มที่จำกัดและไม่จัดการ cross-compilation ได้ดี compiled library แม้ว่าจะมีขนาดเล็กกว่าที่คาดไว้ที่ 2MB แต่ยังคงถือว่าหนักตามมาตรฐานของชุมชนภาษาบางภาษา
ผู้ดูแลโปรเจกต์ยอมรับข้อจำกัดเหล่านี้และแสดงความหวังสำหรับการใช้งาน native ในภาษาโปรแกรมมิ่งต่างๆ เมื่อการพัฒนาก้าวหน้าไป อย่างไรก็ตาม การพึ่พิงปัจจุบันในการใช้งาน Kotlin สร้างอุปสรรคสำหรับการยอมรับในสภาพแวดล้อมมากมาย
แม้ว่าวิสัยทัศน์ของ KSON เรื่อง configuration-as-UI จะแสดงแนวทางที่น่าสนใจต่อปัญหาทั่วไป แต่การตอบสนองจากชุมชนในระยะแรกแสดงให้เห็นว่าความกังวลด้านความปลอดภัยและความคลุมเครือของไวยากรณ์อาจจำกัดการยอมรับจนกว่าปัญหาพื้นฐานเหล่านี้จะได้รับการแก้ไข