Bilgisayar programları ve ilişkili datalar ve dokümantasyon.
Türk Dil Kurumu şu şekilde tanımlar: "Bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümü.". İngilizcesi "software" şeklindedir. Oxford Learner's Dictionaries ise şöyle tanımlar: "the programs used by a computer for doing particular jobs". Türkçe karşılığı şöyledir: "belirli işleri yapmak için bir bilgisayar tarafından kullanılan programlar".
En düşük programlama seviyesinde (1), yürütülebilir kod (2), tek bir işlemci tarafından desteklenen makine dili (3) talimatlarından oluşur. Bu işlemci, tipik olarak bir merkezî işlem birimi (4) veya bir grafik işlem birimidir (5). Makine dili, bilgisayarın durumunu önceki durumundan değiştiren işlemci talimatlarını gösteren ikili değer gruplarından oluşur. Örneğin, bir yönerge, bilgisayardaki belirli bir konumda depolanan değeri değiştirebilir, bu, kullanıcı tarafından doğrudan gözlemlenemeyen bir etkidir. Bir talimat (Örneğin: bilgisayar ekranında bazı metinlerin görüntülenmesi) birçok giriş veya çıkış işleminden birini de çağırabilir. Bu, kullanıcının görmesi gereken durum değişikliklerini kullanıcının görebilmesini sağlar. İşlemci, kendisine farklı bir talimata "atlaması" talimatı verilmedikçe veya işletim sistemi tarafından kesintiye uğratılmadıkça talimatları verildikleri sırayla yürütür. 2015 senesi itibarıyla çoğu kişisel bilgisayarda (6), akıllı cep telefonunda ve sunucuda birden fazla yürütme birimine sahip işlemciler veya birlikte hesaplama yapan birden fazla işlemciler kullanılmaya başlanmış, hesaplama, geçmişe göre çok daha eş zamanlı bir etkinlik durumuna gelmiştir.
Yazılımların birçoğu yüksek seviyeli programlama dillerinde (7) yazılmaktadır. Yüksek seviyeli programlama dilleri, doğal dillere makine dillerinden daha yakın olması sebebiyle programcılar için daha kolay ve verimlidir. Yüksek seviyeli diller; bir derleyici (8), yorumlayıcı (9) veya ikisinin bir kombinasyonu kullanılarak makine diline çevrilir. Bilgisayarın makine dili talimatlarına güçlü bir şekilde uyan ve bir çevirici kullanılarak makine diline çevrilen düşük seviyeli bir çevirme dilinde (10) de program yazmak mümkündür.
***
Yazılımların çeşitleri de vardır. Yazılımlar, hedefe veya kullanım alanına bağlı olarak aşağıdaki gibi sınıflandırılabilir:
1. Uygulama yazılımları (application software): Uygulama yazılımları bilgisayarın kendisinin temel işlemlerinin ötesinde özel işlevleri gerçekleştirmek için bilgisayar sistemini kullanır. Birçok farklı uygulama yazılımı çeşidi vardır çünkü modern bir bilgisayarla gerçekleştirilebilecek şeylerin yelpazesi çok geniştir.
2. Sistem yazılımları (system software): Kullanıcıların ihtiyaç duyduğu temel işlevleri sağlar veya varsa diğer yazılımların düzgün çalışması için donanım davranışını yönetir. Bununla birlikte uygulama yazılımını çalıştırmak için bir platform sağlamak üzere tasarlanmıştır.
Sistem yazılımları da kendi içinde çeşitlere ayrılır, onlar da şöyledir:
2.1. İşletim sistemleri (operating systems): Kaynakları yöneten ve bunların üstünde çalışan diğer yazılımlar için ortak hizmetler sağlayan temel yazılım koleksiyonlarıdır. Denetim programları (11), ön yükleyiciler (12), kabuklar (13) ve pencere sistemleri (14); işletim sistemlerinin temel parçalarıdır. Uygulamada, bir işletim sistemi, bir kullanıcının sadece bir işletim sisteminin bulunduğu bir bilgisayarla potansiyel olarak bazı işler yapabilmesi için ekstra yazılımlarla (uygulama yazılımı dâhil) birlikte gelir.
2.2. Aygıt sürücüleri (device drivers): Bilgisayara bağlı belirli bir aygıt çeşidini çalıştırır veya denetler. Her aygıtın en az bir tane ilgili aygıt sürücüsüne ihtiyacı vardır. Tipik olarak bir bilgisayarda en az bir giriş aygıtı ve bir çıkış aygıtı bulunduğu için bir bilgisayar genellikle birden fazla aygıt sürücüsüne ihtiyaç duyar.
2.3. Yardımcı programlar (utilities): Kullanıcılara bilgisayarlarının bakımını yapmakta yardımcı olmak için tasarlanmış bilgisayar programlarıdır.
3. Kötü amaçlı yazılımlar (malicious software/malware): Bilgisayarlara zarar vermek veya bilgisayarları bozmak için geliştirilmiş yazılımlardır. Bilgisayar suçlarıyla yakından ilişkilidir ancak bazı kötü amaçlı programlar şaka yapmak amacıyla tasarlanmış olabilir.
***
Kullanıcının tipik bir masaüstü bilgisayardaki uygulama yazılımlarıyla nasıl etkileşime girdiğini gösteren bir diyagram: i.ibb.co/... . 1'inci katman, kullanıcı; 2'nci katman, uygulama yazılımı; 3'üncü katman, işletim sistemi; 4'üncü katman, donanımdır. Uygulama yazılımı katmanı, işletim sistemi ile arayüz oluşturur ve bu da donanımla iletişim kurar. Oklar bilgi akışını gösterir.
Blender, ücretsiz bir yazılım programı: i.ibb.co/... .
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Dipnotlar:
1) Düşük seviyeli programlama dilleri bir bilgisayarın komut seti mimarisinden çok az soyutlama sağlayan veya hiç soyutlama sağlamayan programlama dilleridir. Bir komut seti mimarisi, dil haritasındaki işlemcinin komutlarına yapısal olarak benzeyen komutlar veya işlevlerdir. İngilizcesi "low-level programming language" şeklindedir.
2) Bir bilgisayarın anlamlı olması için bir program tarafından yorumlanması (ayrıştırılması) amacıyla, kodlanmış talimatlara göre belirtilen görevleri gerçekleştirmesini sağlar. İngilizcede "executable", "executable code", "executable file", "executable program" ve "binary" olarak geçer.
3) Bir bilgisayarın merkezî işlem birimini (CPU) kontrol etmek için kullanılan makine dili komutlarından oluşan düşük seviyeli programlama dilleridir.
4) Bir bilgisayar programından oluşan talimatları yürüten elektronik işlemcilerdir. İngilizcesi "Central Processing Unit" ve "CPU" (büyük harflerle) şeklindedir. "Merkezî işlemci" (central processor), "ana işlemci" (main processor) ve "işlemci" (processor) olarak da bilinir.
5) Grafik işlemlerini yapan elektronik işlemcilerdir. İngilizcesi "Graphics Processing Unit" ve "GPU" (büyük harflerle) şeklindedir.
6) Boyutları, yetenekleri ve fiyatlarıyla bireysel kullanım için uygun olan çok amaçlı mikro bilgisayarlardır. İngilizcesi "Personal Computer" ve "PC" (büyük harflerle) şeklindedir.
7) Bilgisayar biliminde yüksek seviyeli programlama dilleri, bilgisayarın ayrıntılarından güçlü bir şekilde soyutlanan programlama dilleridir. İngilizcesi "high-level programming language" şeklindedir.
8) Bir programlama dilinde (kaynak dil) yazılmış bilgisayar kodunu başka bir programlama diline (hedef dil) çeviren bir bilgisayar programıdır. İngilizcesi "compiler" şeklindedir.
9) Bilgisayar biliminde "yorumlayıcı", daha önce bir makine dili programında derlenmiş olmayı gerektirmeden bir programlama dilinde veya betik dilinde (İngilizce: scripting language) yazılmış talimatları doğrudan yürüten bir bilgisayar programıdır.
10) Dildeki komutlar ile mimarinin makine kodu komutları arasında çok güçlü bir uyumun bulunduğu düşük seviyeli programlama dilleridir. İngilizcesi "assembly language", "assembler language" ve "symbolic machine code" şeklindedir. Genellikle "Assembly" (ilk harfi büyük) olarak bilinir ve "ASM" (büyük harflerle) veya "asm" (küçük harflerle) olarak kısaltılır.
11) Genellikle bir işletim sisteminin parçası olan, diğer rutinlerin yürütülmesini kontrol eden, iş planlamasını, giriş ve çıkış işlemlerini, hata eylemlerini ve benzeri işlevleri düzenleyen ve bir veri işleme sistemindeki iş akışını düzenleyen bilgisayar programlarıdır. İngilizcede "supervisory program" ve "supervisor" olarak geçer.
12) Bilgisayarların ön yüklenmesinden sorumlu olan bilgisayar programlarıdır. İngilizcesi "bootloader" şeklindedir ve aynı zamanda yazı dilinde "boot loader" olarak da yazılabilir. Buna ek olarak "boot manager" ve "bootstrap loader" olarak da geçer.
13) Bir işletim sisteminin hizmetlerini bir insan kullanıcıya veya diğer programlara sunan bilgisayar programlarıdır. İngilizcesi "shell" şeklindedir.
14) Ekranların farklı bölümlerini ayrı ayrı yöneten yazılımlardır. İngilizcede "windowing system" ve "window system" olarak geçer.