Difference between revisions of "OS: PRAKTIKUM — Cross-Platform App Build"

From OnnoWiki
Jump to navigation Jump to search
Line 72: Line 72:
 
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===
├── Makefile
+
package/hello-cross/
└── src/
+
  ├── Makefile
    └── hello-openwrt.c
+
  └── 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
 
include $(TOPDIR)/rules.mk
 
include $(TOPDIR)/rules.mk
Line 125: Line 131:
  
 
$(eval $(call BuildPackage,hello-cross))
 
$(eval $(call BuildPackage,hello-cross))
Build Package
 
  
make package/hello-cross/compile V=s
+
===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)
+
 
 +
==Compile Android App (APK)==
 
Konsep Build Aplikasi Android
 
Konsep Build Aplikasi Android
 
Android:
 
Android:
Line 230: Line 238:
 
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]]

Revision as of 11:25, 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 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) 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.

Pranala Menarik