Geçenlerde bir Android Tablet aldım ve kod yazmak için tablet kullanma fikri beni heyecanlandırdı. Aslında bu amaç için bir çok uzak masaüstü yazılımı kullanılabilir. Fakat kodu direk olarak tablet üzerinde yazabilmek ve içerisine Linux kurabilme fikri beni daha çok cezbetti. Bu sebeple konu hakkında epey bir araştırma yaptım ve birçok şey denedim. Bu konu hakkındaki elde ettiğim bilgileri paylaşmak istedim.
Android işletim sistemi bilindiği üzere zaten bir Linux işletim sistemidir. Burada Android işletim sistemini Linux yapan şey, Android’in Linux Kernel kullanmasıdır. Fakat kullanıcı uzayında Android, glibc gibi Standart GNU Linux Sistem kütüphanelerini ve servislerini kullanmaz. Android, Linux’ü sadece Kernel’inde olan cihaz sürücüleri , hafıza, işlem ve ağ yönetim yazılımları için kullanır. Normal Linux dağıtımlarından farklı olarak Android kullanıcı uzayında hepsi C/C++ ile yazılmış Android Native kütüphaneleri bulunur. Fakat bu kütüphaneler java arayüzü ile kullanılır. Android’de Linux kullanıcı uzayında, C/C++ kütüphanelerinin yanında Android çalışma zamanını yöneten ismine DVM (Dalvik Virtual Machine) dediğimiz bir sanal makina bulunur. Buradaki Sanal makinenin amacı, normal class ve Jar dasyalarındansa çalışma zamanında daha verimli olan dex formatındaki dosyaları çalıştırmak, hafıza ve işlem gücünden tasarruf etmektir. Doğal olarak jar ve class dosyaları dex formatına çevrilir ve dvm tarafindan çalıştırılır. Fakat Android’in yeni sürümlerinde DVM artık çalısma zamanında kullanılmıyormuş. Sanal Makinenin üzerinde bir uygulama çerçeve katmanı vardır. Bu katman, Android için uygulama geliştirirken ihtiyaç duyulan araçları içerir. Bu araçlar da Java da yazılmış olup Google tarafından sağlanmıştır. Uygulama Çerçeve Katmanının en büyük kısmını Activity Manager ve back-Stack oluşturur. Activity Manager ve back-stack, bir üst katmanda bulunan uygulamaların yaşam döngüsünü yöneten programlardır. Zaten bu katmanın bir üst katmanında ise uygulama katmanı bulunur.
NormaI Linux dağıtımlarında Kernel’in üzerindeki kullanıcı uzayında kullanıcı arayüzünü sağlayan GNU Shell, Gnome masaüstü arayüzü, Xorg grafik sunucusu ve bunun yanında tüm yazılımlar için sağlanmış glibc gibi birçok kütüphane ve yazılım bulunur. Linux üzerindeki bir yazılımın çalışabilmesi için bu gibi çevresel yazılımların olması gerekir. Bu sebeple Linux için derlenmiş çoğu program Android üzerinde çalışmaz. Aynı sekilde Android için derlenmiş bir yazılım, Activity Manager ve çekirdek Java Kütüphane-araçlarına ihtiyaç duyduğundan zate Linux üzerinde çalışmaz. Tabi Linux üzerinde android uygulamalarını çalıştırabileceğiniz içerisinde saydığım modülleri içeren adb gibi frameworkler mevcut. Aynı şekilde bu Android içinde Linux dağıtımı çalıştırmak için de geçerli.
Peki Linux’ü telefon ya da tablet üzerine arada hiç bir işletim sistemi olmadan kuramaz mıyım? Bu sorunun kısa cevabı “hayır”. Cevabın “hayır” olmasının en büyük sebebi Android için yazılmış cihaz sürücülerin mevcut Linux dağıtımlarında olmamasından kaynaklanıyor. Android için kullanılan Linux kernel’in cihaz üreticileri tarafından tescillenmiş olması bu sürücüleri basit bir şekilde alıp diğer dağıtımlara uyarlayabilmeyi oldukça zorlaştırıyor. Diğer bir değişle ortak bir Android kernel olsa da hemen hemen her markanın kendi cihazı için geliştirdiği bir kernel mevcut. Çünkü her marka aynı chip ve entegreleri kullanmayabiliyor. Bu kernellerin az bir sayıda olanı açık kaynak olsalar da telif hakları ve lisanslaması kendilerine ait. Bu sebeple siz oradaki sürücüleri alıp kendi oluşturduğunuz sürümde dağıtmaya kalktığınızda hak iddia edebiliyorlar. Bu da bir çok geliştiricinin bu yöndeki girişimini etkiliyor. Ayrıca bir çok Android cihaz, kilitlenmiş bootloader üzerinde geliyor. Bu da cihaza kurulmuş olan sistemin dışında herhangi başka bir sistemin kurulamayacağı anlamına geliyor. Aslında piyasada bootloader’i kilitli üretilmeyen ve üzerine başka sistemIer kurulabilen telefon ve tabletler mevcut. Ve bu cihazlar için Ubuntu yakın zamanda adım atarak gerekli mobile sürücüleri içeren Ubuntu Touch sürümünü çıkarmış. Fakat piyasadaki mevcut bu cihazlar hem eski hem de özel üretim olduklarından ya pahalı ya da kullanışsız oluyorlar.
Bu durumda satın aldığınız Android cihaz üzerine Linux kurmanın tek bir yolu kalıyor. O ise Termux. Termux, Android’in uygulama katmanında çalışan bir terminal emilatorüdür. Googleplay üzerinden indirilebiliyor. Terminal Emilatörü, kullanıcının kullanıcı arayüzü vasıtası ile komut satırına(shell) ulaşmasını sağlayan bir programdır. Komut satırı yani shell, Unix isIetim sistemlerinde kernel’in hemen üzerinde yer alan ve kullanıcıların cihazı komutlar aracılığı ile yönetebilmesini sağlayan bir arayüzdür. Bu arayüz tabi ki Android de de vardır.Termux üzerinden android uygulamaları çalıştırılabilir veya çeşitli yönetimsel işlemler gerçekleştirilebilir. Hatta g++,gcc, gdb ve cmake kurdum ve örnek soket programları bile geliştirdim. Burada problem, Linuxe özgü uygulamaları ve masaüstü araçlarını Termux üzerinde çalıştırmaya çalıştığımızda karşımıza çıkıyor. Çünkü başta da söylediğim kütüphane ve çevresel servislerin android üzerinde olmamasından ötürü Linux’e özgü bu yazılımları çalıştıramıyoruz. Fakat eğer gerekli kütüphaneleri ve servisleri yüklersek terminal emiletörünü Linux Shell gibi kullanabiliriz. Bunu yapan internette birçok uygulama ve script mevcut. Bunu genellikle Debian ve türevleri için debootstrap ile yapıyorlar. Debootstrap Debian dosya sistemini başka sistemler içinde oluşturmaya yarayan bir proje. Bu program kullanılarak termux için ayrılan dosya bölümünde Debian ve diğer Linux dağıtımlarının dosya sistemleri oluşturuluyor.
Andronix uygulaması benim bu konudaki favori uygulamam. Andronix internetteki mevcut script ve açık kaynak projelerin linkleri sayesinde Termux üzerine yukarıda bahsettiğim normal bir Linux dağıtımının kullanılabilmesi için gerekli kütüphane ve servisleri indirerek cihazımıza kurmamızı sağlıyor. Aynı işlemi, github daki açık kaynak projeleri indirerek de yapabilirsiniz. Fakat normal bir Android’de Termux gibi bir terminal üzerinde superuser olamazsınız. Bu da terminal üzerinde birçok dosyaya erişemeyeceğiniz veya programı kullanamayacağınız anlamına geliyor. Bu sebeple cihaz üzerinde superuser olmadığınız sürece normal bir Linux dağıtımının gereksinimlerini yükleseniz dahi bazı programları kurma ve kullanma konusunda problem yaşayabiliyorsunuz.Yine de illegal yöntemler kullanarak cihazınızda superuser olabiliyorsunuz. Buna internette telefoncular root atmak veya Jailbreak diyorlar. Fakat cihazınızın güvenliği açısından pek tavsiye edebileceğim birşey değil. Belki telefonunuz için zaten root olan bir Android sürümü bulabilirsiniz.
İstediğiniz Linux dağıtımı için gerekli kütüphane ve servisleri yükledikten sonra Linux dağıtımının xfce gibi masaüstü servislerini-sunucularını Termux üzerinden çalıştıramıyorsunuz. Çünkü cihazınız için uygun x11 sunucusu ve masaüstü kullanımı mevcut değil. Bu sebeple yerel ip (127 0.0.1 ) yani sanal ethernet üzerinde hizmet veren bir VNC yani uzak masaüstü sunucusu kullanarak masaüstüne ulaşip kullanabiliyorsunuz. Bazıları bunun yerine sdl x server gibi başka uygulamalar kullanarak da xfce yi calıştırıyorlar. Fakat bu çoğu durumda problemli ve kullanımı zor. Bence VNC sunucusu yeterince hızlı. Bu yüzden çok gerek olmuyor. Fakat cihazınızda root yetkisini alamadığınız sürece yine de dediğim gibi bazı uygulamaları kullanma noktasında problem yaşayabilirsiniz. Ayrıca normal bir amd64 bilgisayarda kullandığınız birçok yazılım ve araç paketi arm64 için yani telefon ya da tabletiniz için olmayabilir. Bu durumda uygulama veya aracın kaynak kodu varsa onu bulup telefonunuz için derlemeniz gerekiyor.
Artık Linux’ün tadını çıkarabilirsiniz. Kolay Gelsin. 🙂
çok başarılı bir yazı olmuş yusuf bey, teşekkür ederiz.
“Android için kullanılan Linux kernel’in cihaz üreticileri tarafından tescillenmiş olması bu sürücüleri basit bir şekilde alıp diğer dağıtımlara uyarlayabilmeyi oldukça zorlaştırıyor. ” ifadesi ile ne demek istediğinizi anlayamadım. cihaz üreticisi mesela samsung, xiaomi kerneli kendilerine mi kayıt ettiriyorlar? yoksa driverlar sadece belli linux kernellerine özgü çıktığı için her kernel versiyonuna uygun bir driver yok mu? mesela kamera, gps vb. için driverlar muhtemelen açık kaynak kodlu değildir diye düşünüyorum. tersine mühendislik gerektirdiği için zor olabilir.
Yorumunuz için teşekkür ederim Serkan bey. Orada söylemek istediğim sey Ortak bir Android kernel olsa da hemen hemen her markanın kendi cihazı için geliştirdiği bir kernel mevcut. Çünkü her marka aynı chip ve entegreleri kullanmayabiliyor. Bu kernellerin az bir sayıda olanı açık kaynak olsalar da telif hakları ve lisanslaması kendilerine ait. Bu sebeple siz oradaki sürücüleri alıp kendi oluşturduğunuz sürümde dağıtmaya kalktığınızda hak iddia edebiliyorlar. Bu da bir çok geliştiricinin bu yöndeki girişimini etkiliyor. Bir kaç kernel geliştiricisiyle konuştuğumda böyle demişti.
Gerçekten çok güzel bir yazı olmuş, ellerinize sağlık. Linux’un bu kadar özgür olması beni mutlu ediyor, tüm geliştiricilere başarılar dilerim.
Yorumunuz için teşekkür ederim.