Kaynak Paketini İndirme ve Kurulum

Kaynak Kod sayfasından medos_source.tar.gz arşivini indirin ve çıkarın:

tar -xzf medos_source.tar.gz cd medos_source

Arşiv iki dosya içerir: requirements.txt (gerekli sistem paketlerinin listesi) ve bootstrap.sh (etkileşimli kurulum scripti). Kurulumu başlatmak için:

sudo ./bootstrap.sh --root /hedef/dizin

Script sırasıyla şunları sorar: sisteminizin adı, kod adı (VERSION_CODENAME), ID_LIKE değeri (boş bırakılırsa debian kullanılır) ve bir web siteniz olup olmadığı — varsa ana sayfa, destek ve hata bildirimi URL'lerini, yoksa Medcell Studios'un varsayılan adreslerini kullanır.

Onayladıktan sonra script requirements.txt'teki paketleri (debootstrap, qemu-user-static vb.) kurar, debootstrap ile bir Debian Forky ARM64 rootfs'i belirttiğiniz dizine kurar ve /etc/os-release dosyasını girdiğiniz bilgilerle otomatik doldurur.

MedStore Uygulama Geliştirme

MedStore uygulamaları, MedOS'un dart_eval çalışma zamanında çalışan bağımsız .dapp paketleridir. Bu Flutter DEĞİL, saf Dart çalıştıran bir yorumlayıcıdır — Container, Text, Column gibi Flutter widget'ları burada geçersizdir. Arayüz, aşağıda anlatılan JSON metin formatıyla elle inşa edilir.

Zorunlu İki Fonksiyon

String buildUI(String stateStr) { // stateStr "INIT" ise ilk açılıştır, henüz kayıtlı durum yok. // JSON formatında bir arayüz ağacını STRING olarak döndür. } String onAction(String actionId, String argsJson, String stateStr) { // Bir butona/tıklamaya karşılık gelir. // Yeni durumu + yeni arayüzü tek bir string olarak, \u0001 karakteriyle // ayırıp döndür: return yeniState + "\u0001" + yeniUiJson; }

Durum (State) Nasıl Saklanır

Üst düzey (top-level) değişkenlere güvenmeyin — çağrılar arasında sıfırlanır, kalıcı olmaz. Tüm durumu tek bir string olarak encode edip stateStr parametresiyle taşıyın (örn. "5|elma|12" gibi kendi ayraçlarınızla birleştirip parse edin).

String Parse/Split Kuralları

✗ .indexOf(degiskenAyrac) — degisken bir ayraçla cagirmak bazi durumlarda cokebilir. Karakter karakter kendi dongunu yaz: if (s[i] == "|") { ... } ✗ İki veya daha fazla string parametreli yardımcı fonksiyonlar bazen derleyicide çöküyor — mümkünse tek string parametreli tasarlayın (örn. splitPipe(s), splitTilde(s)) ✗ Hazır split/parse kütüphanesine güvenmeyin, elle yazın

JSON Üretimi

dart:convert / jsonEncode kullanmayın — JSON'u kendi elinizle, string birleştirerek (+) oluşturun. Liste elemanları arasına virgül koyarken son elemandan sonra fazla virgül bırakmayın (boş liste durumunu ayrıca kontrol edin).

Desteklenen Arayüz Bileşenleri

column : {"type":"column","crossAxis":"start|end|center|stretch","mainAxis":"...","children":[...]} row : column ile aynı alanlar text : {"type":"text","text":"...","bold":true/false,"size":14} button : {"type":"button","text":"...","actionId":"...","fullWidth":true,"args":{...}} textfield : {"type":"textfield","hint":"...","onChangeActionId":"..."} spacer : {"type":"spacer","height":12} container : {"type":"container","padding":16,"child":{...tek bir bileşen...}} icon : {"type":"icon","name":"check|close|add|delete|settings","size":24}

Buton/Textfield Etkileşimi

button'daki actionId, tıklanınca onAction'a actionId olarak gelir. button'a "args":{"id":5} gibi ekstra veri koyarsanız, argsJson içinde '{"id":5}' olarak gelir — bunu JSON parse etmeyin, elle string arama (indexOf/substring) ile okuyun. textfield'in onChangeActionId'si yazı her değiştiğinde tetiklenir, argsJson '{"value":"yazilan_metin"}' formatında gelir.

Çoklu Dosya

Geliştirici Platformu'ndaki IDE'de "+" butonuyla birden fazla .dart dosyası oluşturabilirsiniz. "Derle"ye basınca IDE bunları arka planda otomatik tek dosyada birleştirir — import 'diger_dosya.dart'; satırlarını normal şekilde kullanabilirsiniz.

Genel Kısıtlar

✗ Flutter paketleri, Material widget'ları, http paketi vb. ✗ dart:io, dosya sistemi erişimi ✗ Karmaşık harici paketler (intl, provider vb.) ✓ while döngüleri, if/else, temel List/Map/String/int/double işlemleri

manifest.json örneği

{ "id": "ornek_uygulama", "name": "Örnek Uygulama", "category": "shared", "version": "1.0", "author": "Adınız" }

Nasıl Oluşturulur

Kod yazmak, derlemek ve .dapp paketini oluşturmak için elle dosya hazırlamanıza gerek yok — Geliştirici Platformu'ndaki tarayıcı tabanlı IDE, kodunuzu yazıp "Derle" dediğinizde tüm bu paketlemeyi sizin için otomatik yapar.

Gönderdiğiniz uygulamalar, MedStore'da herkese açık şekilde görünmeden önce bir onay sürecinden geçer — bu, kullanıcıları kötü niyetli veya bozuk paketlerden korur.

Kendi Dağıtımınızı Oluşturma (MOSP Fork)

MOSP'u temel alıp kendi işletim sisteminizi oluşturmanın tek yolu bootstrap.sh scriptini çalıştırmaktır — elle dosya düzenlemenize gerek yoktur. Script, kurulum sırasında sorduğunuz bilgilerle /etc/os-release dosyasının sonuna otomatik olarak şu satırı ekler:

DISTRIBUTION_BASE="MOSP"

Bu, sisteminizin "MedOS" adını taşımadığını, MOSP'tan türetildiğini dürüstçe beyan eder ve kurulum script'i bunu onaylamanızı zorunlu kılar — onaylamazsanız işlem durur. Ayrıntılı kurallar için Lisans ve Marka Politikası sayfasına bakın.