Skip to main content

Command Palette

Search for a command to run...

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

Updated
5 min read
Memahami Istilah Penting di Node.js – Node-API, Addon C/C++, FFI, ABI, POSIX, dan Evolusi Runtime JavaScript
A

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

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.


🧩 1. Node-API (N-API)

Apa itu Node-API?

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)

Kelebihan Node-API

  • 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

Contoh library yang menggunakan Node-API

  • 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.


🧩 2. Node Addon C/C++

Apa itu addon?

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.

Contoh:

libtensorflow_linux.node
bcrypt_win32.node
canvas.node

Addon ini hanya bisa dijalankan oleh Node.js, bukan Bun, bukan Deno.


🧩 3. FFI (Foreign Function Interface)

Pengertian

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();

Kelebihan FFI

  • Sangat fleksibel

  • Tidak tergantung Node-API

  • Tidak perlu compile ulang .node

Kekurangan

  • Tidak secepat Node-API

  • Bergantung pada format OS (ELF, Mach-O, PE)

Status

  • Node.js → ada modul pihak ketiga (ffi-napi)

  • Bun → punya FFI bawaan

  • Deno → punya FFI bawaan


🧩 4. ABI (Application Binary Interface)

ABI menentukan:

  • bagaimana function dipanggil (calling convention)

  • bagaimana register CPU dipakai

  • struktur memory

  • binary format (.so, .dll, .dylib)

  • cara loader memuat library

Perbedaan ABI antar OS

OSFormatABI
LinuxELFglibc/musl
MacOSMach-Olibc Apple
WindowsPEWin32/MSVC

Addons Node.js untuk Linux tidak bisa dipakai di MacOS atau Windows → karena ABI berbeda.

ABI = “bahasa native” CPU/OS.


🧩 5. POSIX / POSIX-Compliant

POSIX = standar sistem operasi mirip UNIX (Portable Operating System Interface).

OS yang POSIX-compliant:

  • Linux

  • macOS

  • FreeBSD

OS yang TIDAK POSIX:

  • Windows

Dampak Utama POSIX

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.


🧩 6. PUB (Portable POSIX-like UNIX Binary)

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.


🧩 7. Hubungan Semua Istilah: Kenapa di Node Bisa, Tapi di Bun Tidak?

TensorFlow.js Node

  • memakai Node-API

  • memakai addon .node

  • libtensorflow C++ sangat besar

  • butuh loader process.dlopen() milik Node.js

Node.js → bisa

Karena Node membuat ekosistem lengkap di atas:

  • ABI stabil

  • Node-API stabil

  • modul .node

  • node-gyp

Bun → tidak bisa

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.


🧩 8. Node.js Sekarang Mengikuti Perkembangan Bun

Dulu Node.js lambat berinovasi. Tetapi mulai Node 18–20–22:

Node sekarang punya:

  • --watch

  • --env-file

  • --experimental-loader

  • node:test (testing bawaan Node)

  • ESM lebih stabil

  • flag modern --run, --import

  • runtime API lebih rapi

Untuk testing cepat → bisa pakai:

  • Vitest

  • Node:test

  • TAP

Node sekarang sudah modern, meski tidak secepat Bun di cold start.


🧩 9. Node.js ESM vs Bun ESM

Node ESM:

  • paling kompatibel

  • paling luas dukungannya

  • dipakai oleh library besar

  • lambat tapi stabil

Bun ESM:

  • sangat cepat

  • banyak fitur built-in

  • tetapi tidak mendukung native addon .node

Sederhananya:

FeatureNodeBun
Speed❗ lambat⚡ sangat cepat
Native C++ addon✔ penuh❌ tidak
FFImodul pihak ketiga✔ built-in
Testing built-in
Dependency cleanupsedang berkembangsangat bagus
Kompatibilitas NPMpaling lengkaphampir lengkap
ML/AI Native✔ (tfjs-node, onnxruntime-node)

🧩 10. Kesimpulan Besar

✔ Node.js:

  • 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

✔ Bun:

  • 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

POSIX, ABI, Node-API, FFI =

fondasi untuk mengerti mengapa library tertentu bisa jalan di Node.js tapi tidak di Bun.

More from this blog

F

Finlup ID | Sharing dunia teknologi dan coding

206 posts

Membedah Tren dan Teknologi yang Mengubah Dunia.