Ketika "Not Invented Here" Masuk Akal: Mengapa Tritium Membuat Mesin DOCX Kustom

Tim Komunitas BigGo
Ketika "Not Invented Here" Masuk Akal: Mengapa Tritium Membuat Mesin DOCX Kustom

Dalam dunia teknologi hukum, presisi adalah segalanya. Satu koma yang salah tempat atau elemen pemformatan yang terlewat dapat mengubah makna kontrak atau dokumen hukum. Kenyataan ini memaksa tim di Tritium, sebuah startup teknologi hukum, untuk membuat keputusan sulit: meninggalkan pustaka open-source populer dan membangun mesin pemrosesan DOCX mereka sendiri dari nol. Diskusi komunitas mengungkapkan ini bukan sekadar cerita tentang format file, tetapi tentang pertukaran mendasar antara menggunakan solusi yang ada dan memiliki teknologi inti Anda.

Masalah Round-Trip yang Merusak Solusi yang Ada

Fungsi inti Tritium melibatkan pembuatan edit yang presisi pada dokumen hukum yang kompleks sambil mempertahankan setiap elemen pemformatan asli. Hal ini membutuhkan apa yang oleh pengembang disebut round-trip sempurna - kemampuan untuk membaca dokumen Word dan menuliskannya kembali tanpa kehilangan data apa pun, bahkan dari elemen-elemen yang tidak sepenuhnya dipahami oleh perangkat lunak. Kode docx_rs yang ada, meskipun sangat baik untuk menghasilkan dokumen baru, kesulitan dengan persyaratan ini karena pendekatannya yang berbasis enum untuk mengurai struktur DOCX.

Diskusi komunitas menyoroti mengapa hal ini penting. Seperti yang dicatat seorang komentator tentang pengalaman penguraian mereka sendiri: Saya biasanya menambahkan tipe node 'Tidak Dikenal', yang menyimpan hal-hal tidak berubah sampai saya dapat memahaminya lagi. Pendekatan ini, meskipun masuk akal untuk banyak aplikasi, menjadi bermasalah pada skala dokumen hukum yang berisi puluhan ribu entitas XML. Overhead memori untuk menyimpan elemen yang tidak dikenal sebagai string dapat menyebabkan masalah kinerja yang tidak dapat dibedakan dari kebocoran memori raksasa menurut kata-kata artikel asli.

Saya bertanya-tanya mengapa round-trip menjadi perhatian yang begitu kecil bagi orang-orang yang mengimplementasikan berbagai jenis serializer/deserializer.

Wawasan komunitas ini menangkap ketegangan inti antara pustaka serba guna dan kebutuhan khusus. Untuk sebagian besar kasus penggunaan, kehilangan elemen pemformatan kecil dapat diterima, tetapi untuk dokumen hukum di mana setiap detail penting, hal itu bersifat katastropik.

Tantangan Teknis Utama dalam Pemrosesan DOCX

  • Nesting Tak Terbatas: Spesifikasi Word memungkinkan tabel di dalam paragraf di dalam tabel, menciptakan struktur rekursif yang kompleks
  • Manajemen Memori: Dokumen legal dapat berisi lebih dari 100.000 entitas XML yang memerlukan representasi yang efisien
  • Kelengkapan Spesifikasi: Spesifikasi Word sangat besar dan terus berkembang
  • Dukungan Platform: Perlu bekerja di berbagai aplikasi native dan lingkungan web (WASM)

Pertukaran antara Memori dan Kelengkapan

Tantangan teknis berasal dari struktur dokumen Word yang sangat fleksibel yang memungkinkan penumpukan elemen seperti tabel dalam paragraf dalam tabel secara hampir tak terbatas. Pustaka docx_rs menggunakan representasi berbasis enum yang elegan dan hemat memori tetapi tentu saja tidak lengkap - tag XML apa pun yang tidak didukung akan secara diam-diam dibuang selama pemrosesan.

Anggota komunitas menyarankan solusi potensial seperti string interning (menyimpan tag yang berulang sebagai referensi untuk menghemat memori) atau mengimplementasikan varian tidak dikenal yang menangkap semua. Namun, seperti yang ditanggapi tim Tritium, solusi yang lebih baik untuk jangka panjang adalah dengan cukup mengimplementasikan lebih banyak dari spesifikasi Word yang sangat besar. Setelah Anda mencakup sekitar 80% tag, Anda kemungkinan telah mengatasi 99,9% masalah memori mengingat penggunaan tag mengikuti distribusi power-law.

Perbandingan Pendekatan Pemrosesan DOCX

Pendekatan Kelebihan Kekurangan Terbaik Untuk
docx_rs (berbasis enum) Efisien memori, parsing cepat, kompilasi ke WASM Menghilangkan elemen yang tidak dikenal, cakupan spesifikasi tidak lengkap Menghasilkan dokumen baru, pengeditan sederhana
Tritium (kustom) Round-trip sempurna, dukungan spesifikasi lengkap, kontrol penuh Biaya pengembangan tinggi, beban pemeliharaan Pengeditan mission-critical, dokumen legal
Penyimpanan node yang tidak dikenal Mempertahankan semua data, implementasi sederhana Intensif memori, masalah performa pada skala besar Dokumen kecil, prototyping

Konteks Historis dan Solusi Modern

Diskusi mengambil belokan historis yang menarik ketika para komentator mencatat bahwa format asli Word pada dasarnya adalah dump literal dari sebagian segmen data proses Word. Pendekatan memory-mapped ini sangat cepat tetapi menciptakan mimpi buruk portabilitas di berbagai sistem dan versi Word yang berbeda. Seperti yang dijelaskan seorang komentator, Ada kekhawatiran portabilitas yang jelas: little-endian vs. big endian, 32-bit vs. 64-bit, struct padding, dll.

Solusi modern seperti Cap'n Proto dan FlatBuffers telah menghidupkan kembali konsep ini dengan dukungan lintas platform yang lebih baik, tetapi untuk format file produktivitas, konsensus condong ke serialisasi eksplisit untuk stabilitas dan pemulihan yang lebih baik. Perpindahan ke file DOCX berbasis XML sebenarnya membuat pemulihan dokumen jauh lebih andal daripada format biner lama.

Kasus Bisnis untuk Memiliki Stack Anda Sendiri

Mungkin bagian yang paling mengungkap dari diskusi berpusat pada apakah Tritium harus membuat sumber terbuka solusi mereka. Tim mengakui kemungkinannya tetapi menyatakan kekhawatiran bahwa menggeneralisasinya terlalu banyak pada dasarnya akan mengubahnya menjadi LibreOffice yang inferior. Model bisnis mereka berfokus pada penyediaan produk khusus hukum secara gratis kepada komunitas sambil menagih pengguna komersial yang membutuhkan fitur lanjutan.

Pendekatan ini mencerminkan pemahaman yang bernuansa tentang Joel Spolsky's klasik In Defense of Not-Invented-Here Syndrome - ketika sesuatu adalah inti dari bisnis Anda, Anda perlu memilikinya. Seperti yang diamati seorang anggota komunitas: Sulit dipercaya pengacara telah bertahan tanpa ini begitu lama, menyoroti ceruk unik yang diisi Tritium.

Perjalanan dari menggunakan docx_rs hingga membangun solusi kustom menggambarkan kebenaran mendasar dalam pengembangan perangkat lunak: terkadang keputusan teknik terbaik melibatkan membangun apa yang orang lain anggap sudah terselesaikan. Bagi Tritium, persyaratan kesetiaan dokumen yang sempurna dalam konteks hukum membenarkan investasi dalam memiliki stack DOCX mereka sendiri, membuktikan bahwa dalam domain khusus, tidak diciptakan di sini bisa menjadi jalan terdepan yang paling andal.

Referensi: Thoughts on the Word Spec in Rust