Linux
🧱 1️⃣ システム系・CLIツール(ターミナルで動くアプリ)
これは最も伝統的なLinux文化のアプリです。
| 主な言語 | 特徴 |
|---|---|
| C / C++ | OS標準のライブラリ(glibcなど)やシステムAPIを直接扱える。高速・軽量。多くのLinuxコマンドやデーモンがこれで作られている。 |
| Rust | 近年人気急上昇。C並みに速く、メモリ安全。CLIツールやシステムプログラムに最適。Cargoで依存管理も楽。 |
| Python | 学習コストが低く、スクリプト的に使える。多くのLinuxツール(Ubuntuの設定ツールなど)でも採用。 |
🖥️ 2️⃣ GUIアプリケーション(デスクトップアプリ)
Ubuntuデスクトップでウィンドウが開くタイプ。
| 主な言語 | GUIフレームワーク | 特徴 |
|---|---|---|
| C++ | Qt(例:KDE, Krita) | 高性能で本格的なUIを作れる。KDE Plasmaなどの代表格。 |
| Python | GTK(例:Gnome系)や PyQt | コードが短く、学習しやすい。Ubuntu標準ツールにも多く使われている。 |
| Rust | GTK-rs, Iced, egui など | 新世代。軽量で安全。最近はGUI対応も増加中。 |
| Java | JavaFX, Swing | クロスプラットフォームだが、Linuxではやや重め。 |
| Electron(JS + HTML + CSS) | Node.js + Chromium | Web技術で作るGUI。VSCode, Slackなどもこれ。Linuxでも同様に動作。 Chromベースでメモリバカ食い |
🌐 3️⃣ Webアプリ・APIサーバ
LinuxはWebサーバのOSとしても定番。
| 主な言語 | 主なフレームワーク | 特徴 |
|---|---|---|
| Python | Django / Flask / FastAPI | 開発スピードが速く、APIサーバ構築に強い。 |
| Node.js (JavaScript/TypeScript) | Express / NestJS | Web系では最も人気。軽量でスケールしやすい。 |
| Go (Golang) | Gin / Fiber | 高速・低メモリでサーバ向け。デプロイも簡単。 |
| Rust | Actix / Axum | セキュアで超高速。近年のトレンド。 |
| PHP | Laravel / Slim | Webアプリ・ブログ・CMSなどに今も多い。 |
| 優先度 | 言語 | 理由 |
|---|---|---|
| 🥇 Python | OSに標準で入っており、Linux運用からGUIまで何でもできる。将来も生き残る。 | |
| 🥈 Rust | 次世代のC。高速・安全・クロスプラットフォーム。Linuxカーネルにも採用開始。 | |
| 🥉 C++(Qt) | GUIやOS操作が強力で、Windows・macOS・Linux全対応。 |
🔧 開発者が触れる「核に近い」部分
| やりたいこと | できる言語・手法 | 説明 |
|---|---|---|
| デバイスドライバ作成 | C / Rust | カーネルモジュール(.ko)としてビルド。カーネル空間で実行。 |
| システムコール追加 | C | カーネルソース改変 or patch適用。実験的開発向き。 |
| デーモン(常駐プロセス)開発 | C / Rust / Go / Python | systemdサービスとして動作。ユーザ空間でOS管理を行う。 |
| システム設定操作 | C / Python / Bash | /proc や /sys 仮想ファイルを介して設定を変更。 |
| プロセス・メモリ操作 | C / Rust | ptrace や /proc/<pid>/mem などでデバッグや監視が可能。 |
| 領域 | Windows | Linux / Ubuntu |
|---|---|---|
| カーネル | Win32API, NT API経由(制限あり) | カーネルソースや /proc /sys で直接触れる |
| ドライバ開発 | C(WDK必須) | CまたはRust(カーネルモジュール) |
| システムサービス | WinService (.NETやC++) | systemdサービス(どの言語でもOK) |
| ユーザー権限操作 | 制約強め(レジストリ依存) | sudo, capabilities, namespacesで柔軟 |
実は、Linux界隈では次のような流れが進んでいます:
| 流れ | 内容 |
|---|---|
| 🦀 Rustカーネル化 | Linux 6.x系からRustコードが公式採用され始めた(安全なドライバ開発へ)。 |
| 🧩 Flatpak / Snap / AppImage | GUIアプリの配布が統一され、開発者が楽になっている。 |
| 🌐 Webベースのデスクトップ統合 | Electron / Tauri / Flutter などで「OS非依存アプリ」が主流化。 |
| 🖥️ Ubuntuの商用採用 | サーバー・IoTだけでなく、開発環境OSとしての地位も上昇中。 |
| 開発対象 | オススメ言語 | 備考 |
|---|---|---|
| ユーザーアプリ(GUI) | Python(PyQt / GTK) or C++(Qt) | OS依存が少なく移植性高い |
| システムツール / デーモン | Rust / C / Go | OSの核に近い操作も可能 |
| クロスプラットフォーム | Rust / Python / Electron / Tauri | Windows・mac・Linux対応可能 |
| 将来性重視 | Rust 🦀 | カーネル採用済。10年後も強い可能性 |
🧩 OSごとの実行ファイル形式一覧
| OS | 代表的な実行ファイル拡張子 | 中身の形式 | 備考 |
|---|---|---|---|
| Windows | .exe, .dll | PE形式(Portable Executable) | Windows独自。PEヘッダ+セクション構造。 |
| Linux / Ubuntu | 拡張子なし(例:app, mytool) | ELF形式(Executable and Linkable Format) | ほとんどのUNIX系OSが採用。 |
| macOS | .app(実体はフォルダ) or 実行ファイル(拡張子なし) | Mach-O形式 | Darwin(macOSカーネル)の標準実行形式。 |
| Android | .apk(アプリパッケージ) | ZIPに近い構造(中にDEXとリソース) | Javaバイトコード+ネイティブso含む。 |
| iOS | .ipa(アプリパッケージ) | ほぼapkと同じ構造 | 署名必須でApple環境限定。 |
🧠 各形式の特徴をざっくり説明
🪟 Windows(PE)
.exeと.dllがこれ。- 「セクション(.text, .data, .rdata)」で構成。
- 実行時はWindowsローダーが読み込んで仮想メモリに展開。
- Microsoft独自で、Linuxではそのまま動かない(Wineなどが変換実行)。
🐧 Linux / Ubuntu(ELF)
- 実行ファイルにも共有ライブラリにも使われる。
- 実際は
.out,.binとして出力されることもあるが、拡張子不要。 - 実行権限(
chmod +x)があれば動く。 ld(リンカ)やld-linux.so(ローダー)がロードして実行。
🍎 macOS(Mach-O)
- Apple独自フォーマット。
- ELFに似てるけど細部が違う(セグメント構成など)。
- Universal Binary(Intel + ARM両対応)もサポート。
- Finder上では「.app」と見えるが、中身はフォルダ構造(
Contents/MacOS/実行ファイル)。
| OS | 実行形式 | 拡張子 | ビルド例 |
|---|---|---|---|
| Windows | PE | .exe | gcc main.c -o app.exe |
| Linux / Ubuntu | ELF | (なし) | gcc main.c -o app |
| macOS | Mach-O | (.appの中) | clang main.c -o app |
🔧 小ネタ:同じCコードを複数OS用にビルド可能!
Cはクロスプラットフォーム性が高く、
例えば同じ main.c でもターゲットを変えれば各OSの形式に変換できます👇
| 目的 | コマンド例 |
|---|---|
| Linux向け | gcc main.c -o myapp |
| Windows向け(Linux上で) | x86_64-w64-mingw32-gcc main.c -o myapp.exe |
| macOS向け(クロスコンパイル) | o64-clang main.c -o myapp |

コメント