FreeCAD Tarayıcıya Taşındı: 2,2 Milyon Satırlık CAD WASM'da
LibreCAD ve OpenSCAD portlarının ardından FreeCAD de WebAssembly'e taşındı. Fable ajanı 4 günde JSPI, özel Qt derlemesi ve WebGL2 shim'iyle devasa CAD kernelini tarayıcıya sığdırdı.
LibreCAD ve OpenSCAD'ı WebAssembly'e taşıyan bir dizi projenin ardından sıradaki hedef çok daha büyük bir hedef oldu: FreeCAD. Yaklaşık 1,5 milyon satır C++ ve 700 bin satır Python içeren bu parametrik CAD platformu; OpenCASCADE geometri çekirdeği, Coin3D sahne grafiği, gömülü CPython, PySide6 Qt bağlayıcıları ve FEM için VTK/SMESH gibi ağır bileşenleri tek bir wasm modülünde birleştiriyor. Port, HackerNews'te başlayan bir tartışmanın ardından yaklaşık dört gün içinde, büyük ölçüde Fable adlı yapay zeka aracıyla gerçekleştirildi ve tüm istemler ile oturum kayıtları herkese açık olarak yayımlandı.
Teknik zorlukların merkezinde iki konu var: modal diyalogların (yüzlerce exec() çağrısı) senkron davranışını korumak için WebAssembly JSPI destekli özel bir Qt derlemesi gerekiyordu; çünkü hazır Qt-for-wasm paketleri bunu desteklemiyor. İkinci büyük engel ise Coin3D'nin klasik sabit-fonksiyon OpenGL çağrılarını (glBegin, matris yığınları) modern WebGL2/GLES ortamına taşımaktı — bu, elle yazılmış yaklaşık 900 satırlık bir emülatör ve Qt'nin GL widget'ını offscreen framebuffer üzerinden yeniden derleme (compositing) çözümüyle aşıldı.
Geliştirme süreci 'kernel-first' disiplinle ilerledi: önce arayüzsüz FreeCADCmd'nin node ve tarayıcıda çalışması doğrulandı, sonra GUI bağlantısı, ardından pencere açılışı ve son olarak WebGL2 görüntüleme katmanı eklendi. Derinlik tamponu, seçim sürüklemede beyazlama ve köşe noktalarının yanlış bellekten okunması gibi ince hatalar tek tek ayıklandı; sonuçta etkileşimli kare hızına ulaşıldı.
Sonuçta ortaya 196 MB'lık statik wasm modülü ve yaklaşık 96 MB sıkıştırılmış ilk yükleme boyutu çıktı; şu an için sadece JSPI destekleyen güncel Chromium tabanlı tarayıcılarda çalışıyor. Mühendisler için önemi, çok büyük ve eski varsayımlara sahip masaüstü uygulamalarının bile disiplinli bir yaklaşım ve yapay zeka destekli otomasyonla tarayıcıya taşınabileceğini kanıtlaması.