IOS, Android'ten Daha Mı Stabil ?

IOS, Android'ten Daha Mı Stabil ?

Bu karşılaştırmayı daha sağlıklı yapabilmek için ilk olarak sistemlerin yapısına ufak bir göz atalım. Günümüz mobil işletim sistemlerinin yapısını en basit şekilde anlatacak olursak şu şekildedir: Donanım ile uygulamalar arasındaki bağlantıyı kuracak sistem, bu sistemdeki uygulamaların hangi programlama dilinde yazılacağına bağlı olarak yazılır. Bu yazılıma Kernel adı verilir. Kernel, sistemin en kritik yazılımıdır. Buradaki kodlarda en ufak bir istisnai durum olmaması gerekir, dolayısıyla Kernel kodu yazarken koda gelişmiş özellikler vs. eklemek yerine, en anlaşılır, basit ve kısa yazılmaya özen gösterilir, yalnızca ne iş yapması gerekiyorsa o yaptırılır (“Do one thing and do it well”). Kernel’a sahip olan bir sistemin boot edilebilir, boot edildikten sonra komutlarla yönetilebilir durumda olması beklenir. Bu aşamadan sonra IOS ve Android arasındaki farklılık başlamaktadır.

İlk olarak Android’i ele alalım. Android’in uygulama paket dili olan Java dilindeki uygulamaları çalıştırabilmek için Java dilini anlayan sanal bir makineye ihtiyacı vardır. Android’te bu sanal makinenin adı Android 5’ten önce Dalvik Virtual Machine, 5 ve sonrasında ART Virtual Machine’dir. Bu sanal makine ne iş yapar kısaca bahsedelim. Android sisteminde yazılan uygulamalar Java olduğundan dolayı (başka dillerle de yazılabiliyor fakat o ayrı bir konu) sanal bir makine üzerinde çalışması gerekir. Bilgisayarda Java Virtual Machine kullanırız, Android’te ise Dalvik/ ART. Sisteme kurulmuş uygulama paketleri (APK’lar) yüklendikten sonra çalışmak için, C dili ile yazılmış bu sanal makineye ihtiyaç duyar.

Peki IOS’ta durum nedir? IOS’ta boyle bir sanal makine bulunmamaktadır. Yazılan uygulamalar farklı donanımlara özel olarak derlenerek, sanal bir makine yerine direkt olarak sistem üzerinde çalışır. Bildiğiniz gibi IOS’da uygulama dili Objective C’dir. Objective C ile normal C arasındaki temel fark, Objective C adından da anlaşıldığı üzere C nin nesne tabanlı versiyonudur. C++ gibi fakat C++ değil. Kullanılacağı sistem için (Apple’ın sistemleri) daha özelleştirilmiş bir dil. Şunu da belirtmekte yarar var: Objective C, C’yi de kapsar.

Şimdi kaldığımız yerden devam edelim. Sistemimiz en temel şekilde çalışmaya başladı. Peki şimdi ne olacak ? Bu saatten sonra kullanıcının sistemi daha rahat kullanabilmesi için bir arayüz ve bu arayüz üzerine sistemin temel programlarını (ayarlar, rehber, arama, kamera vs.) yazmak kaldı. Şimdi gelelim asıl konumuza. Android’in zoru neymiş de uygulamaları IOS gibi direkt sistem üzerinde çalıştırmak yerine sanal bir makine üzerinde çalıştırıyor ? Aslında bu yapıda olduğu için Android’i eleştirmek, arabayı “sen neden uçuyorsun” diye eleştirmekle aynı şeydir.

Takip edenler bilir, son zamanlarda Android işletim sistemli buzdolabı, çamaşır makinesi gibi beyaz eşyalardan tutun her türlü elektronik cihazın Android versiyonlularının yapıldığı haberleri çıkmaktadır. Bu kadar çeşitli donanımlar üzerinde Android nasıl çalışabiliyor? Yalnız Android çalışsa neyse, Android’e yazılmış tüm uygulamalar da sistemle birlikte çalışıyor. Aslında Android sadece amacını gerçekleştiriyor! Android projesinin temel amacı; işlemcisi, RAM’i, temel donanım parçaları olan her türlü cihaz üzerinde çalışabilecek bir işletim sistemi oluşturmaktı. Tabi bunu oluştururken önemli olan “bir sistem yapalım da farklı donanımlarda çalışsın”dan ziyade, o sistem üzerine yazılan bir uygulamanın TÜM Android cihazlarda çalışabilmesidir. O sistem üzerinde yazılan bir uygulama derken içine ayarlar, kamera gibi temel programların yanında flappy bird, candy crush gibi oyunlardan tutun Google Play’deki her türlü uygulamayı kastediyoruz. Android ve uygulamalarının bu şekilde donanım seçmeksizin tüm sistemlerde çalışabilmesini Java diline borçludur. Sisteme özel bir kernel yazılır, Java’yı anlayabilen sanal makine kurulur ve geri kalan tüm uygulamalar Java üzerinde çalışır. Bunun aksine Apple, paket programlarında da C dili kullandığı için kendi cihazı dâhi olsa bir cihazında çalışan uygulama diğer cihazında çalışamaz. Uygulamayı her cihaza ayrı ayrı derlemek gerekir. Fakat böyle olduğu için uygulamalar stabil ve daha az kaynak tüketerek çalışır. Tüm olay bundan ibaret.