Memahami Istilah Penting di Node.js β Node-API, Addon C/C++, FFI, ABI, POSIX, dan Evolusi Runtime JavaScript

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Search for a command to run...

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
No comments yet. Be the first to comment.
Ringkasan: Jika OpenClaw adalah AI Operating System yang menghubungkan berbagai layanan dan agent, maka Hermes adalah AI Worker yang fokus mengerjakan pekerjaan, belajar dari pengalaman, dan semakin p

Ketika membangun aplikasi modern seperti Next.js, Cloudflare Workers, platform AI, microservices, atau real-time dashboard, ada banyak istilah jaringan yang sering muncul: TCP, UDP, HTTP/2, QUIC, WebS

Setiap tahun, ribuan mahasiswa jurusan Teknologi Informasi, Sistem Informasi, dan Teknik Informatika diwisuda. Namun, tidak sedikit di antara mereka yang kemudian menghadapi kenyataan yang cukup berat

Jika Anda menggunakan Next.js, kemungkinan besar Anda pernah mendengar anggapan bahwa: "Next.js = Vercel" Padahal kenyataannya tidak harus demikian. Di sinilah OpenNext hadir. OpenNext adalah proyek

Saat pertama kali mencoba OpenCode Go, saya hampir langsung berlangganan tanpa membaca detail program yang mereka sediakan. Untungnya saya menemukan bahwa OpenCode memiliki program referral yang membe

Dalam dunia JavaScript backend, terutama ketika membicarakan performa, integrasi native, dan kompatibilitas lintas platform, ada beberapa istilah teknis yang wajib dipahami. Artikel ini membahas secara lengkap berbagai istilah tersebut, serta hubungannya dengan Node.js dan alternatif modern seperti Bun.
Node-API (sering disebut N-API) adalah abstraksi resmi dalam Node.js untuk membangun native addon dengan bahasa C atau C++.
Ini adalah API tingkat stabil yang memungkinkan kita:
memanggil fungsi C/C++
membuat modul .node
mengakses memory native
melakukan operasi berat (misal image processing, machine learning, crypto)
Stabil: tidak rusak meski Node.js update major version
Lintas-OS: binary bisa di-build untuk Linux, Mac, dan Windows
Didukung resmi: cocok untuk library besar seperti sharp, bcrypt, node-canvas, puppeteer (Chromium bindings), dan tensorflow.js-node
Sharp (image processing)
Canvas (render)
Bcrypt native
TensorFlow.js Node binding
SQLite native addons
ZeroMQ
libusb
Inilah alasan Node.js sangat kuat di ekosistem native.
Addon adalah file binary dengan ekstensi:
.node (khusus Node.js)
menggunakan Node-API atau nan
hasil compile dari C/C++ ke format binary OS
Addons menghubungkan JavaScript dengan performa native.
libtensorflow_linux.node
bcrypt_win32.node
canvas.node
Addon ini hanya bisa dijalankan oleh Node.js, bukan Bun, bukan Deno.
FFI adalah cara memanggil library .so, .dll, .dylib langsung dari JavaScript tanpa membuat Node addon.
FFI menyediakan API seperti:
ffi.open("libexample.so").symbols.myFunction();
Sangat fleksibel
Tidak tergantung Node-API
Tidak perlu compile ulang .node
Tidak secepat Node-API
Bergantung pada format OS (ELF, Mach-O, PE)
Node.js β ada modul pihak ketiga (ffi-napi)
Bun β punya FFI bawaan
Deno β punya FFI bawaan
ABI menentukan:
bagaimana function dipanggil (calling convention)
bagaimana register CPU dipakai
struktur memory
binary format (.so, .dll, .dylib)
cara loader memuat library
| OS | Format | ABI |
| Linux | ELF | glibc/musl |
| MacOS | Mach-O | libc Apple |
| Windows | PE | Win32/MSVC |
Addons Node.js untuk Linux tidak bisa dipakai di MacOS atau Windows β karena ABI berbeda.
ABI = βbahasa nativeβ CPU/OS.
POSIX = standar sistem operasi mirip UNIX (Portable Operating System Interface).
Linux
macOS
FreeBSD
Inilah sebab library seperti sharp, canvas, libvips, cairo, freetype, png, dll lebih mudah jalan:
Linux β β
macOS β β
Windows β β khusus (perlu build tool yang rumit)
POSIX membuat:
filesystem mirip
permission mirip
libc mirip
syscall mirip
Karena itu dev tool Linux/Mac jauh lebih kompatibel.
PUB = binary yang kompatibel di sistem UNIX-like (Linux & macOS), karena hal seperti:
struktur folder mirip
standar libc mirip
mode file mirip
toolchain compatible (clang/gcc)
Tetapi PUB tidak kompatibel ke Windows karena format PE berbeda.
memakai Node-API
memakai addon .node
libtensorflow C++ sangat besar
butuh loader process.dlopen() milik Node.js
Karena Node membuat ekosistem lengkap di atas:
ABI stabil
Node-API stabil
modul .node
node-gyp
Karena Bun:
tidak 100% support Node-API
tidak support binary .node (C++ addon)
tidak punya loader native seperti Node.js
Bun cepat, tetapi bukan pengganti semua fitur Node.
Dulu Node.js lambat berinovasi. Tetapi mulai Node 18β20β22:
--watch
--env-file
--experimental-loader
node:test (testing bawaan Node)
ESM lebih stabil
flag modern --run, --import
runtime API lebih rapi
Vitest
Node:test
TAP
Node sekarang sudah modern, meski tidak secepat Bun di cold start.
paling kompatibel
paling luas dukungannya
dipakai oleh library besar
lambat tapi stabil
sangat cepat
banyak fitur built-in
tetapi tidak mendukung native addon .node
Sederhananya:
| Feature | Node | Bun |
| Speed | β lambat | β‘ sangat cepat |
| Native C++ addon | β penuh | β tidak |
| FFI | modul pihak ketiga | β built-in |
| Testing built-in | β | β |
| Dependency cleanup | sedang berkembang | sangat bagus |
| Kompatibilitas NPM | paling lengkap | hampir lengkap |
| ML/AI Native | β (tfjs-node, onnxruntime-node) | β |
paling kompatibel
mendukung Node-API, addon .node, native module
kuat untuk AI, gambar, multimedia, ML
lebih matang berkat ESM modern, --watch, --env, dan node:test
paling cepat
lengkap untuk web dev (HTTP, HTMLRewriter, test, env)
tapi tidak cocok untuk native-heavy workloads seperti:
TensorFlow
FFmpeg full bindings
GPU processing
TensorRT, CUDA, OpenCV
fondasi untuk mengerti mengapa library tertentu bisa jalan di Node.js tapi tidak di Bun.