Port Windows Editor Zed Hadapi Kendala Teknis Saat Komunitas Perdebatkan Strategi Lintas Platform

Tim Komunitas BigGo
Port Windows Editor Zed Hadapi Kendala Teknis Saat Komunitas Perdebatkan Strategi Lintas Platform

Versi Windows yang sangat dinantikan dari Zed, sebuah editor kode yang berfokus pada performa, telah menghadapi tantangan teknis yang signifikan yang menyoroti kompleksitas pengembangan lintas platform. Meskipun tim telah membuat kemajuan substansial dengan empat insinyur yang bekerja penuh waktu pada port tersebut selama enam minggu, perjalanan ini telah mengungkap perbedaan fundamental dalam cara Windows menangani grafis, sistem file, dan operasi sistem dibandingkan dengan macOS dan Linux.

Perombakan Backend Grafis Memicu Diskusi Developer

Tantangan paling signifikan datang dari ketergantungan awal Zed pada API grafis Vulkan, yang menyebabkan masalah kompatibilitas pada banyak mesin Windows. Tim menemukan bahwa penggunaan mereka terhadap ekstensi dynamic rendering Vulkan 1.3 terlalu ambisius untuk kompatibilitas yang luas. Hal ini memaksa mereka untuk membuat backend rendering DirectX 11 yang sepenuhnya baru, lengkap dengan implementasi shader HLSL untuk melengkapi versi MSL (macOS) dan WGSL (Vulkan) yang sudah ada.

Perombakan grafis meluas melampaui sekadar mengganti API. Tim harus meninggalkan Direct2D untuk rendering teks karena bertentangan dengan RenderDoc, sebuah alat debugging yang krusial untuk pengembangan grafis Windows. Mereka beralih ke DirectWrite untuk rasterisasi glyph, yang sebenarnya membantu memperbaiki bug yang ada dengan batas karakter dan masalah clipping.

Catatan: Vulkan adalah API grafis modern yang menyediakan akses tingkat rendah ke perangkat keras GPU, sementara DirectX 11 adalah API grafis mapan Microsoft yang dijamin bekerja pada Windows 7 dan yang lebih baru.

Tantangan Teknis yang Dihadapi:

  • Graphics API: Beralih dari Vulkan 1.3 ke DirectX 11 untuk kompatibilitas yang lebih luas
  • Bahasa Shader: Kini memelihara tiga implementasi ( MSL , WGSL , HLSL )
  • Rendering Teks: Berpindah dari Direct2D ke DirectWrite untuk kompatibilitas debugging
  • Penggunaan Memori: Memperbaiki inefisiensi VRAM dalam rendering jalur dengan optimasi MSAA
  • Pembaruan Otomatis: Membuat binary helper khusus untuk pembatasan sistem file Windows
  • Pelaporan Crash: Mengimplementasikan simbolikasi sisi server menggunakan file minidump
Gambar ini menyoroti tantangan yang dihadapi tim pengembangan Zed akibat masalah kompatibilitas grafis saat melakukan porting ke Windows
Gambar ini menyoroti tantangan yang dihadapi tim pengembangan Zed akibat masalah kompatibilitas grafis saat melakukan porting ke Windows

Masalah Manajemen Memori Mengekspos Perbedaan Platform

Masalah kritis muncul ketika anggota tim mulai menggunakan Zed sebagai driver harian mereka di Windows - crash yang sering terjadi karena kegagalan alokasi memori GPU. Masalah ini tidak terlihat di macOS karena Mac terbaru menggunakan arsitektur unified memory, di mana RAM sistem dan memori grafis dibagi. Sistem Windows dan Linux biasanya memiliki memori grafis yang terpisah dan lebih terbatas.

Solusinya datang dari sumber yang tidak terduga: tim Longbridge, yang menggunakan framework UI Zed untuk aplikasi mereka sendiri. Mereka mengidentifikasi inefisiensi dalam cara Zed merender path (garis dan kurva yang digunakan untuk seleksi dan highlight). Pendekatan asli membuat beberapa tekstur besar untuk anti-aliasing, mengonsumsi memori video yang berlebihan. Perbaikannya melibatkan menggambar semua path ke satu tekstur, mengurangi penggunaan memori sambil benar-benar meningkatkan performa di semua platform.

Komunitas Terpecah Soal Pendekatan Pengembangan Lintas Platform

Tantangan teknis telah memicu kembali perdebatan dalam komunitas developer tentang strategi pengembangan lintas platform. Beberapa berpendapat bahwa membangun toolkit kustom mengarah pada masalah seperti ini, menyarankan bahwa framework yang sudah mapan akan menghindari masalah kompatibilitas grafis sepenuhnya.

Namun, pendukung membantah bahwa pendekatan ini memungkinkan Zed untuk benar-benar terasa native di setiap platform daripada menghadirkan editor lambat lainnya yang mengemas seluruh browser. Manfaat performa dari pendekatan kustom mereka terlihat jelas dalam penggunaan sehari-hari, meskipun proses pengembangannya lebih kompleks.

Inilah mengapa Anda tidak membuat toolkit lintas platform sendiri.

Diskusi ini mencerminkan ketegangan yang lebih luas dalam pengembangan perangkat lunak antara mengambil jalan pintas dengan framework yang ada versus membangun solusi yang dioptimalkan dan spesifik platform.

Item Pekerjaan yang Tersisa:

  • Adaptasi pengikatan tombol untuk konvensi Windows
  • SSH remoting dengan kompatibilitas jalur Windows/Linux
  • Dukungan WSL ( Windows Subsystem for Linux ) kelas pertama
  • Perbaikan konvensi jalur ekstensi
  • Optimisasi performa untuk backend DirectX 11 yang baru

Tantangan Spesifik Windows di Luar Grafis

Port Windows mengungkap berbagai rintangan spesifik platform di luar rendering grafis. Auto-updater memerlukan desain ulang lengkap karena Windows mencegah penimpaan file executable saat sedang berjalan. Tim membuat helper auto update terpisah yang menangani operasi file ketika Zed tidak aktif.

Bahkan crash reporting perlu dikerjakan ulang. Analisis crash Windows memerlukan file PDB yang terlalu besar untuk dikirim dengan installer, jadi tim mengimplementasikan simbolisasi server-side dari file minidump untuk pengguna yang memilih ikut serta.

Ke depan, tim masih menghadapi tantangan dengan key binding (pengguna Windows mengharapkan shortcut keyboard yang berbeda), SSH remoting (konvensi path file yang berbeda), integrasi WSL, kompatibilitas ekstensi, dan optimisasi performa untuk backend grafis yang baru.

Port Windows Zed menggambarkan bagaimana perbedaan platform berjalan jauh lebih dalam daripada elemen UI tingkat permukaan. Meskipun komitmen tim terhadap performa native patut diacungi jempol, technical debt dari pendekatan kustom mereka terus terakumulasi saat mereka ekspansi ke platform baru.

Referensi: Zed for Windows: What's Taking So Long?!