Yazılım, bir bilgisayarın veya cihazın donanımına ne yapması gerektiğini söyleyen, fiziksel olarak dokunulamayan komut ve veri bütünüdür. Donanım (hardware) ekran, işlemci, klavye gibi elle tutulabilen fiziksel parçalarken; yazılım bu parçaları belirli bir sırayla ve mantıkla çalıştıran görünmez talimatlar kümesidir.
Bu ayrım, bilgisayar biliminin en temel kavramlarından biridir ve yazılımın "ne olduğunu" anlamanın başlangıç noktasıdır.
Bir bilgisayarı bedene, yazılımı ise o bedeni yöneten zihne benzetmek yaygın bir açıklama biçimidir: beden (donanım) hareket etme kapasitesine sahiptir ama neyi ne zaman yapacağına zihin (yazılım) karar verir. Donanım değişmeden kalsa bile, üzerine yüklenen yazılım değiştiğinde aynı cihaz tamamen farklı bir işlevi yerine getirebilir.
Bir yazılım, önce insanın okuyup yazabileceği bir programlama diliyle (kaynak kod) yazılır. Bu kaynak kod, işlemcinin doğrudan anlayabileceği ikili (0 ve 1) bir dile, makine koduna, dönüştürülür. Bu dönüştürme işlemini bir derleyici veya yorumlayıcı denen ayrı bir yazılım yapar.
Bir donanım parçası kırılabilir, aşınabilir veya fiziksel olarak taşınması gerekir; yazılım ise bir dosya olarak var olur, sınırsız sayıda kopyalanabilir ve internet üzerinden saniyeler içinde bir cihazdan diğerine aktarılabilir. Bu özellik, yazılımın güncellenmesini, dağıtımını ve yedeklenmesini donanıma göre çok daha esnek kılar.
Bir yazılım çalıştırıldığında, işlemci o yazılımın makine koduna dönüştürülmüş talimatlarını sırayla okur ve uygular; bu talimatlar bellekte veri okuma/yazma, ekrana bir şey çizme veya bir ağ isteği gönderme gibi görevler olabilir. Kullanıcı bir düğmeye tıkladığında, aslında bu zincirin bir adımını tetiklemiş olur.
Bir yazılım yayımlandıktan sonra bile içinde fark edilmeyen hatalar (bug) veya güvenlik açıkları bulunabilir; güncellemeler bu hataları düzeltir, yeni özellik ekler veya değişen donanım/işletim sistemi sürümleriyle uyumluluğu korur. Yazılımın fiziksel olmaması, bu düzeltmelerin cihaz elden çıkarılmadan, uzaktan dağıtılabilmesini mümkün kılar.
Lisanslı (ticari) yazılımda kaynak kod genellikle kapalıdır ve kullanım bir ücret veya sözleşme karşılığında sağlanır. Açık kaynak yazılımda ise kaynak kod herkese açıktır, incelenebilir ve değiştirilebilir. İki model de kurumsal ortamda bir arada kullanılır; seçim, ihtiyaca, bütçeye ve destek beklentisine göre yapılır.
Yazılım, işlevine göre büyük ölçüde iki gruba ayrılır: donanımı yöneten sistem yazılımı ve kullanıcının doğrudan etkileşime girdiği uygulama yazılımı. Bu ayrımı ve her birinden somut örnekleri, "yazılım nedir 3 tane örnek" başlıklı yazımızda daha ayrıntılı ele alıyoruz.
Basit bir hesap makinesi uygulaması birkaç yüz satır kodla yazılabilirken, büyük bir işletim sistemi milyonlarca satır koddan oluşabilir. Yazılımın boyutu, yerine getirdiği işlevin karmaşıklığıyla doğru orantılıdır; büyük bir yazılım genellikle küçük, birbiriyle iletişim kuran parçalara bölünerek yönetilir.
Bir yazılımın, yazıldığı sırada öngörülemeyen bir girdi veya durum karşısında beklenmedik davranması, yazılım hatası olarak adlandırılır. Bu hatalar donanımdan değil kodun mantığından kaynaklanır; bu yüzden çözümleri de fiziksel bir tamir değil, kodun düzeltilip yeniden dağıtılmasıdır.
Bir yazılım, ilk yazıldığında birkaç kullanıcı için tasarlanmış olsa da, sonradan binlerce kullanıcıya hizmet verecek şekilde genişletilebilir. Buna ölçeklenebilirlik denir. Bu, yazılımın fiziksel bir sınırı olmamasının doğal bir sonucudur; donanım tarafında ek sunucu kaynağı eklenerek bu büyüme desteklenir.
Bir yazılım ne kadar iyi yazılmış olursa olsun, çalıştığı donanım yetersizse beklenen performansı vermez; bu yüzden bir yazılımın belirttiği minimum sistem gereksinimleri, yazılım-donanım ilişkisinin pratik bir göstergesidir.
Bazı yazılımlar yalnızca tek bir işletim sisteminde çalışacak şekilde yazılırken, bazıları farklı işletim sistemlerinde de çalışabilecek şekilde tasarlanır; buna platform bağımsızlığı denir. Bu özellik, aynı yazılımın farklı donanım/işletim sistemi kombinasyonlarında yeniden yazılmadan kullanılabilmesini sağlar.
Bir yazılım; planlama, yazılma, test edilme, yayımlanma ve güncellenme aşamalarından oluşan bir yaşam döngüsüne sahiptir. Bu döngü, yazılımın fiziksel bir ürün gibi bir kere üretilip bitmediğini, aksine sürekli bakım gerektiren canlı bir sistem olduğunu gösterir.
Bir yazılımın maliyeti yalnızca satın alma bedelini değil; kurulum, eğitim, bakım ve gerektiğinde özelleştirme maliyetlerini de kapsar. Ucuz görünen bir yazılım, bu ek maliyetler eklendiğinde toplamda daha pahalıya gelebilir.
Bir yazılımın nasıl kullanılacağını, hangi ayarların ne işe yaradığını anlatan dokümantasyon, yazılımın kendisi kadar değerli bir tamamlayıcı unsurdur; iyi belgelenmemiş bir yazılım, teknik olarak güçlü olsa bile kullanıcılar tarafından verimli kullanılamayabilir.
Bir yazılımın güvenliği, yalnızca doğru çalışması değil, kötü niyetli bir kullanımın (yetkisiz erişim, veri sızıntısı) da önlenmesi anlamına gelir; bu yüzden bir yazılım yazılırken işlevsellik kadar güvenlik de baştan tasarıma dahil edilmesi gereken bir konudur.
Techno Fusion'da: TF Bilişim, işletmelerin kullandığı lisanslı kurumsal yazılımların (Microsoft 365, Windows Server gibi) kurulumunu, yapılandırmasını ve güncel tutulmasını üstleniyor.