Difference between revisions of "OS: PRAKTIKUM — Cross-Platform App Build"
Onnowpurbo (talk | contribs) (Created page with " PRAKTIKUM 10 — Cross-Platform App Build One Source Code, Multiple Operating Systems Tujuan Praktikum Praktikum ini bertujuan membuktikan secara nyata bahwa: Perbedaan sist...") |
Onnowpurbo (talk | contribs) |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| + | ==Tujuan Praktikum== | ||
| + | Praktikum ini bertujuan membuktikan secara nyata bahwa: | ||
| + | Perbedaan sistem operasi bukan pada kernel semata, | ||
| + | tetapi pada user space, toolchain, dan runtime. | ||
| − | + | Setelah praktikum ini, mahasiswa diharapkan mampu: | |
| − | + | * Meng-compile CLI tool native di Ubuntu 24.04 | |
| + | * Meng-compile package OpenWRT menggunakan cross-toolchain | ||
| + | * Meng-compile aplikasi Android (APK) dari source | ||
| + | * Memahami konsep cross-platform dan cross-compilation secara praktis | ||
| − | + | ==Konteks Akademik & Konsep Inti== | |
| − | + | ===Posisi Praktikum dalam Alur Sistem Operasi=== | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | Konteks Akademik & Konsep Inti | ||
| − | Posisi Praktikum dalam Alur Sistem Operasi | ||
Mengacu pada outline Sistem Operasi, 2026, praktikum ini berada setelah: | Mengacu pada outline Sistem Operasi, 2026, praktikum ini berada setelah: | ||
| − | Build kernel Linux | + | * Build kernel Linux |
| − | Build OpenWRT x86 | + | * Build OpenWRT x86 |
| − | Build Android x86 | + | * Build Android x86 |
| − | Build aplikasi open source (BAB 15) | + | * Build aplikasi open source (BAB 15) |
| + | |||
Artinya, mahasiswa kini: | Artinya, mahasiswa kini: | ||
| − | Tidak hanya membangun OS | + | * Tidak hanya membangun OS |
| − | Tetapi memanfaatkan OS sebagai platform eksekusi aplikasi lintas sistem | + | * Tetapi memanfaatkan OS sebagai platform eksekusi aplikasi lintas sistem |
Mindset kunci: | Mindset kunci: | ||
| − | Mahasiswa berpindah dari OS builder menjadi system integrator. | + | Mahasiswa berpindah dari OS builder menjadi system integrator. |
| − | Konsep Dasar Cross-Platform App Build | + | |
| + | ==Konsep Dasar Cross-Platform App Build== | ||
Satu source code dapat menghasilkan binary berbeda, tergantung: | Satu source code dapat menghasilkan binary berbeda, tergantung: | ||
| − | Arsitektur CPU | + | * Arsitektur CPU |
| − | libc yang digunakan | + | * libc yang digunakan |
| − | ABI (Application Binary Interface) | + | * ABI (Application Binary Interface) |
| − | Toolchain | + | * Toolchain |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | {| class="wikitable" style="margin:auto" | ||
| + | ! Platform !! Compiler !! libc | ||
| + | |- | ||
| + | | Ubuntu 24.04 || gcc || glibc | ||
| + | |- | ||
| + | | OpenWRT || target-gcc || musl | ||
| + | |- | ||
| + | | Android || clang (NDK) || bionic | ||
| + | |} | ||
Kesimpulan akademik: | Kesimpulan akademik: | ||
| − | Kernel Linux sama, user space menentukan kompatibilitas aplikasi. | + | Kernel Linux sama, user space menentukan kompatibilitas aplikasi. |
| − | Compile CLI Tool di Ubuntu 24.04 | + | ==Compile CLI Tool di Ubuntu 24.04== |
| − | Tujuan | + | ===Tujuan=== |
Membangun CLI tool native Linux sebagai baseline sebelum masuk ke cross-compile. | Membangun CLI tool native Linux sebagai baseline sebelum masuk ke cross-compile. | ||
| − | Source Code CLI Tool (C) | + | |
| + | ===Source Code CLI Tool (C)=== | ||
| + | <pre><nowiki> | ||
// hello-cli.c | // hello-cli.c | ||
#include <stdio.h> | #include <stdio.h> | ||
| Line 60: | Line 57: | ||
return 0; | return 0; | ||
} | } | ||
| − | + | </nowiki></pre> | |
| − | sudo apt update | + | ===Langkah Compile di Ubuntu=== |
| − | sudo apt install -y build-essential | + | sudo apt update |
| − | gcc hello-cli.c -o hello-cli | + | sudo apt install -y build-essential |
| + | gcc hello-cli.c -o hello-cli | ||
Jalankan: | Jalankan: | ||
| − | ./hello-cli | + | ./hello-cli |
| + | |||
Observasi OS: | Observasi OS: | ||
| − | Binary ELF dieksekusi oleh kernel Linux | + | * Binary ELF dieksekusi oleh kernel Linux |
| − | printf() → system call → kernel | + | * printf() → system call → kernel |
Ini adalah user space murni | Ini adalah user space murni | ||
| − | Analisis Akademik Singkat | + | |
| + | ==Analisis Akademik Singkat== | ||
Gunakan: | Gunakan: | ||
| − | ldd hello-cli | + | ldd hello-cli |
| − | file hello-cli | + | file hello-cli |
| + | |||
Mahasiswa dapat melihat: | Mahasiswa dapat melihat: | ||
| − | Dependency glibc | + | * Dependency glibc |
| − | Arsitektur binary | + | * Arsitektur binary |
| − | Loader ELF | + | * Loader ELF |
| − | Compile OpenWRT Package (Cross-Compile) | + | ==Compile OpenWRT Package (Cross-Compile)== |
| − | Konsep Build di OpenWRT | + | ===Konsep Build di OpenWRT=== |
OpenWRT tidak membangun aplikasi langsung di target, melainkan: | OpenWRT tidak membangun aplikasi langsung di target, melainkan: | ||
| − | Build di Ubuntu (host) | + | * Build di Ubuntu (host) |
| − | Jalan di OpenWRT (target) | + | * Jalan di OpenWRT (target) |
Inilah cross-compilation yang sesungguhnya. | Inilah cross-compilation yang sesungguhnya. | ||
| − | Struktur Package OpenWRT | + | |
| − | package/hello-cross/ | + | ===Struktur Package OpenWRT=== |
| − | + | package/hello-cross/ | |
| − | + | ├── Makefile | |
| − | + | └── src/ | |
| − | Source Code (Sama Secara Logika) | + | └── hello-openwrt.c |
| + | |||
| + | ===Source Code (Sama Secara Logika)=== | ||
| + | <pre><nowiki> | ||
#include <stdio.h> | #include <stdio.h> | ||
| Line 99: | Line 103: | ||
return 0; | return 0; | ||
} | } | ||
| + | </nowiki></pre> | ||
| + | |||
Makefile OpenWRT | Makefile OpenWRT | ||
| + | <pre><nowiki> | ||
include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||
| Line 125: | Line 132: | ||
$(eval $(call BuildPackage,hello-cross)) | $(eval $(call BuildPackage,hello-cross)) | ||
| − | Build Package | + | </nowiki></pre> |
| + | |||
| + | ===Build Package=== | ||
| + | make package/hello-cross/compile V=s | ||
| − | |||
Hasil .ipk dapat di-install di OpenWRT: | Hasil .ipk dapat di-install di OpenWRT: | ||
| − | opkg install hello-cross.ipk | + | opkg install hello-cross.ipk |
| − | hello | + | hello |
Insight OS: | Insight OS: | ||
| − | Binary OpenWRT tidak bisa dijalankan di Ubuntu, walau kernel sama. | + | Binary OpenWRT tidak bisa dijalankan di Ubuntu, walau kernel sama. |
| − | Compile Android App (APK) | + | |
| − | Konsep Build Aplikasi Android | + | ==Compile Android App (APK)== |
| + | ===Konsep Build Aplikasi Android=== | ||
Android: | Android: | ||
| − | Tidak menjalankan binary Linux biasa sebagai app | + | * Tidak menjalankan binary Linux biasa sebagai app |
| − | Menggunakan APK | + | * Menggunakan APK |
| − | Runtime: ART | + | * Runtime: ART |
Namun, source tetap open source, dan build dilakukan di Ubuntu. | Namun, source tetap open source, dan build dilakukan di Ubuntu. | ||
| − | Contoh Aplikasi Android Sederhana | + | |
| + | ===Contoh Aplikasi Android Sederhana=== | ||
Struktur minimal: | Struktur minimal: | ||
| − | HelloAndroid/ | + | HelloAndroid/ |
| − | + | ├── AndroidManifest.xml | |
| − | + | ├── build.gradle | |
| − | + | └── app/ | |
| − | + | └── src/main/java/MainActivity.java | |
| − | Contoh MainActivity.java | + | |
| + | ===Contoh MainActivity.java=== | ||
| + | <pre><nowiki> | ||
package com.example.helloandroid; | package com.example.helloandroid; | ||
| Line 163: | Line 176: | ||
} | } | ||
} | } | ||
| + | </nowiki></pre> | ||
| + | |||
Build APK di Ubuntu (Gradle) | Build APK di Ubuntu (Gradle) | ||
| − | ./gradlew assembleDebug | + | ./gradlew assembleDebug |
| + | |||
APK akan berada di: | APK akan berada di: | ||
| − | app/build/outputs/apk/debug/ | + | app/build/outputs/apk/debug/ |
| − | |||
| − | adb install app-debug.apk | + | ===Install ke Android x86=== |
| + | adb install app-debug.apk | ||
Observasi OS: | Observasi OS: | ||
| − | Aplikasi berjalan sebagai process Android | + | * Aplikasi berjalan sebagai process Android |
| − | Terisolasi UID | + | * Terisolasi UID |
| − | Tidak bisa akses kernel langsung | + | * Tidak bisa akses kernel langsung |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | {| class="wikitable" style="margin:auto" | ||
| + | |+ Perbandingan & Analisis Cross-Platform | ||
| + | |- | ||
| + | ! Aspek !! Ubuntu !! OpenWRT !! Android | ||
| + | |- | ||
| + | | Output || ELF binary || ELF binary || APK | ||
| + | |- | ||
| + | | libc || glibc || musl || bionic | ||
| + | |- | ||
| + | | Toolchain || gcc || target-gcc || clang | ||
| + | |- | ||
| + | | Runtime || Linux || Linux || ART | ||
| + | |- | ||
| + | | Target || Server/Desktop || Embedded || Mobile/VM | ||
| + | |} | ||
| + | Insight penting: | ||
| + | Cross-platform bukan berarti satu binary untuk semua, tetapi satu source untuk banyak build. | ||
| − | + | ==Mini Challenge (Fun & Menantang)== | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | Mini Challenge (Fun & Menantang) | ||
Beberapa tantangan opsional: | Beberapa tantangan opsional: | ||
| − | Ubah teks output → build ulang di 3 OS | + | * Ubah teks output → build ulang di 3 OS |
| − | Bandingkan ukuran binary | + | * Bandingkan ukuran binary |
| − | Jalankan strace di Ubuntu vs Android | + | * Jalankan strace di Ubuntu vs Android |
| − | Amati syscall yang gagal di Android | + | * Amati syscall yang gagal di Android |
Tantangan ini melatih analisis OS behavior, bukan sekadar compile. | Tantangan ini melatih analisis OS behavior, bukan sekadar compile. | ||
| − | Refleksi Akademik (OBE-Oriented) | + | |
| + | ==Refleksi Akademik (OBE-Oriented)== | ||
Setelah praktikum ini, mahasiswa mampu: | Setelah praktikum ini, mahasiswa mampu: | ||
| − | ✅ Meng-compile aplikasi lintas OS | + | * ✅ Meng-compile aplikasi lintas OS |
| − | ✅ Memahami toolchain dan ABI | + | * ✅ Memahami toolchain dan ABI |
| − | ✅ Mengaitkan user space dengan kernel | + | * ✅ Mengaitkan user space dengan kernel |
| − | ✅ Berpikir sebagai cross-platform system engineer | + | * ✅ Berpikir sebagai cross-platform system engineer |
| − | Penutup | + | |
| + | ==Penutup== | ||
Praktikum ini menegaskan satu hal penting: | Praktikum ini menegaskan satu hal penting: | ||
| − | Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar. | + | Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar. |
| + | |||
Mahasiswa kini: | Mahasiswa kini: | ||
| − | Tidak hanya membangun OS | + | * Tidak hanya membangun OS |
| − | Tidak hanya membangun aplikasi | + | * Tidak hanya membangun aplikasi |
| − | Tetapi menghubungkan keduanya secara lintas platform | + | * Tetapi menghubungkan keduanya secara lintas platform |
| + | |||
Selamat — Anda telah menembus batas antar sistem operasi. | Selamat — Anda telah menembus batas antar sistem operasi. | ||
| − | |||
==Pranala Menarik== | ==Pranala Menarik== | ||
* [[Sistem operasi]] | * [[Sistem operasi]] | ||
Latest revision as of 11:33, 15 February 2026
Tujuan Praktikum
Praktikum ini bertujuan membuktikan secara nyata bahwa:
Perbedaan sistem operasi bukan pada kernel semata, tetapi pada user space, toolchain, dan runtime.
Setelah praktikum ini, mahasiswa diharapkan mampu:
- Meng-compile CLI tool native di Ubuntu 24.04
- Meng-compile package OpenWRT menggunakan cross-toolchain
- Meng-compile aplikasi Android (APK) dari source
- Memahami konsep cross-platform dan cross-compilation secara praktis
Konteks Akademik & Konsep Inti
Posisi Praktikum dalam Alur Sistem Operasi
Mengacu pada outline Sistem Operasi, 2026, praktikum ini berada setelah:
- Build kernel Linux
- Build OpenWRT x86
- Build Android x86
- Build aplikasi open source (BAB 15)
Artinya, mahasiswa kini:
- Tidak hanya membangun OS
- Tetapi memanfaatkan OS sebagai platform eksekusi aplikasi lintas sistem
Mindset kunci:
Mahasiswa berpindah dari OS builder menjadi system integrator.
Konsep Dasar Cross-Platform App Build
Satu source code dapat menghasilkan binary berbeda, tergantung:
- Arsitektur CPU
- libc yang digunakan
- ABI (Application Binary Interface)
- Toolchain
| Platform | Compiler | libc |
|---|---|---|
| Ubuntu 24.04 | gcc | glibc |
| OpenWRT | target-gcc | musl |
| Android | clang (NDK) | bionic |
Kesimpulan akademik:
Kernel Linux sama, user space menentukan kompatibilitas aplikasi.
Compile CLI Tool di Ubuntu 24.04
Tujuan
Membangun CLI tool native Linux sebagai baseline sebelum masuk ke cross-compile.
Source Code CLI Tool (C)
// hello-cli.c
#include <stdio.h>
int main() {
printf("Hello from Ubuntu CLI tool!\n");
return 0;
}
Langkah Compile di Ubuntu
sudo apt update sudo apt install -y build-essential gcc hello-cli.c -o hello-cli
Jalankan:
./hello-cli
Observasi OS:
- Binary ELF dieksekusi oleh kernel Linux
- printf() → system call → kernel
Ini adalah user space murni
Analisis Akademik Singkat
Gunakan:
ldd hello-cli file hello-cli
Mahasiswa dapat melihat:
- Dependency glibc
- Arsitektur binary
- Loader ELF
Compile OpenWRT Package (Cross-Compile)
Konsep Build di OpenWRT
OpenWRT tidak membangun aplikasi langsung di target, melainkan:
- Build di Ubuntu (host)
- Jalan di OpenWRT (target)
Inilah cross-compilation yang sesungguhnya.
Struktur Package OpenWRT
package/hello-cross/
├── Makefile
└── src/
└── hello-openwrt.c
Source Code (Sama Secara Logika)
#include <stdio.h>
int main() {
printf("Hello from OpenWRT!\n");
return 0;
}
Makefile OpenWRT
include $(TOPDIR)/rules.mk PKG_NAME:=hello-cross PKG_VERSION:=1.0 include $(INCLUDE_DIR)/package.mk define Package/hello-cross SECTION:=utils CATEGORY:=Utilities TITLE:=Hello Cross Platform endef define Build/Compile $(TARGET_CC) $(TARGET_CFLAGS) \ -o $(PKG_BUILD_DIR)/hello \ $(PKG_BUILD_DIR)/hello-openwrt.c endef define Package/hello-cross/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/bin/ endef $(eval $(call BuildPackage,hello-cross))
Build Package
make package/hello-cross/compile V=s
Hasil .ipk dapat di-install di OpenWRT:
opkg install hello-cross.ipk hello
Insight OS:
Binary OpenWRT tidak bisa dijalankan di Ubuntu, walau kernel sama.
Compile Android App (APK)
Konsep Build Aplikasi Android
Android:
- Tidak menjalankan binary Linux biasa sebagai app
- Menggunakan APK
- Runtime: ART
Namun, source tetap open source, dan build dilakukan di Ubuntu.
Contoh Aplikasi Android Sederhana
Struktur minimal:
HelloAndroid/
├── AndroidManifest.xml
├── build.gradle
└── app/
└── src/main/java/MainActivity.java
Contoh MainActivity.java
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
protected void onCreate(Bundle b) {
super.onCreate(b);
TextView tv = new TextView(this);
tv.setText("Hello from Android APK!");
setContentView(tv);
}
}
Build APK di Ubuntu (Gradle)
./gradlew assembleDebug
APK akan berada di:
app/build/outputs/apk/debug/
Install ke Android x86
adb install app-debug.apk
Observasi OS:
- Aplikasi berjalan sebagai process Android
- Terisolasi UID
- Tidak bisa akses kernel langsung
| Aspek | Ubuntu | OpenWRT | Android |
|---|---|---|---|
| Output | ELF binary | ELF binary | APK |
| libc | glibc | musl | bionic |
| Toolchain | gcc | target-gcc | clang |
| Runtime | Linux | Linux | ART |
| Target | Server/Desktop | Embedded | Mobile/VM |
Insight penting:
Cross-platform bukan berarti satu binary untuk semua, tetapi satu source untuk banyak build.
Mini Challenge (Fun & Menantang)
Beberapa tantangan opsional:
- Ubah teks output → build ulang di 3 OS
- Bandingkan ukuran binary
- Jalankan strace di Ubuntu vs Android
- Amati syscall yang gagal di Android
Tantangan ini melatih analisis OS behavior, bukan sekadar compile.
Refleksi Akademik (OBE-Oriented)
Setelah praktikum ini, mahasiswa mampu:
- ✅ Meng-compile aplikasi lintas OS
- ✅ Memahami toolchain dan ABI
- ✅ Mengaitkan user space dengan kernel
- ✅ Berpikir sebagai cross-platform system engineer
Penutup
Praktikum ini menegaskan satu hal penting:
Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar.
Mahasiswa kini:
- Tidak hanya membangun OS
- Tidak hanya membangun aplikasi
- Tetapi menghubungkan keduanya secara lintas platform
Selamat — Anda telah menembus batas antar sistem operasi.