Öncelikle bilgisayarınızdaki fiziksel tüm unsurlar donanım adını alırken, geri kalan her şey yazılım olarak nitelendirilir. Sade bir ifadeyle, yazılım donanıma "nasıl davranacağını" ve hangi işlemleri yapacağını anlatır. Kelime işlemci programlar, bilgisayarınız açıldığında CD sürücünüzü, sabit sürücüleri, RAM'i tanıyan BIOS; işletim sistemi, web tarayıcınız, virüslerin kendileri, antivirüs programları hep birer yazılımdırlar.
Her yazılım her bilgisayarda çalışır mı? Bilgisayarda hangi işletim sistemi kurulu olduğundan bağımsız şekilde çalışabilen yazılımlar üretebilse de, pek çok yazılım tek bir işletim sisteminde çalışacak şekilde üretilir. Ayrıca her yazılımın çalışmak için gereksinim duydupu farklı donanım özellikleri olabilir ve bu donanıma sahip olmayan bilgisayarlarda bu yazılımı çalıştırmak mümkün olmayabilir. Bilgisayarlarda, DİZGE YAZILIMI ve UYGULAMA YAZILIMI olmak üzere iki tür yazılım mevcuttur.
Internete bağlı bilgisayarlar üzerinde farklı yazılım türleri bulunmaktadır.

Bunlar:

  • Herkese açık yazılımlar (Public Domain): Bu yazılımları yazanlar, programların sınırsız kopyalanmasına ve kullanılmasına izin verirler. Programın aslının değiştirilmemesini isteyebilirler. Programlarının üçüncü kişilere parayla satılmasını istemezler. Ayrıca, alınan dosya başka bir yerde kullanılacaksa yazarına bildirilmesi istenmektedir.
  • Paylaşılabilir Yazılımlar (Shareware): Kullanıcı yazılımı belirli bir süre kullanmakta (1 hafta, 15 gün, 1 ay…) eğer beğenirse satın almaktadır. Bu tür yazılımlar ucuzdur. Bu tür yazılımlar farklı özelliklere sahip olabilmektedir.
    • Bazı yazılımların deneme süresi bitmesine rağmen kullanılabilirler. Programın açılışında veya kullanırken bu programın kayıtlı bir yazılım olduğunu belirten mesajlar gelir.
    • Bazı yazılımlar deneme süresi sonucunda kullanılamazlar.
    • Bazı yazılımların deneme süresince tüm özellikleri kullanılmayabilir. Belirli bir miktar para ödedikten sonra tüm özelliklerine sahip olunabilir.
  • Deneme Yazılımları (Tryware): Geliştirilmiş bir yazılımın tanıtım amacıyla piyasaya sürdüğü, sınırlı olarak kullanılabilen yazılımlardır.
  • Yama Yazılımları (Pathc): Bir yazılımın, eksik yönlerinin saptanıp düzeltip güncellemek amacıyla piyasaya sürülen yazılımlardır.
  • Posta kartı programları (Postcardware): Belirli günleri kutlamak amacıyla hazırlanan posta kartı yazılımlarıdır.
Internet üzerinde bulunan yazılım türlerine örnekler: Programlar, ders yazılımları, video, müzik yayınları, oyunlar, belgeler, tanıtım ve propaganda yayınları, dergi, gazete, radyo ve TV yayınları, kitaplar, hobiler, mali konular.

DİZGE YAZILIMLARI, bilgisayar üreticisi tarafından hazırlanmış, işlemler arasındaki denetimleri, programların çevrilmesini sağlayan ve her işletim sırasında kullanılan yazılımlardır. Kısacası, bilgisayarın işletimini sağlayan yazılımlardır. Dizge yazılımları, her bilgisayar dizgesinin kendine özgü özellikte olmasına karşın, uygulama yazılımları genellikle farklı bilgisayarlarda kullanılabilecek biçimde hazırlanır.
Makine dili mikroişlemci ya da mikrodenetleyici gibi komut işleme yeteneğine sahip entegrelerin işleyebilecekleri komutlardan ve buna uygun söz diziminden oluşan dile verilen addır. Makine dili, işlemcinin verilen komutlardoğrultusunda çalıştırılmasını sağlayan ve işle mci mimarisine göre değişen en alt seviyedeki proglama dilidir . Bu dil sadece 0 ve 1 binary ikililerinin anlamlı kombinasyonlarından meydana gelmektedir. Bu nedenle, makine dilinin anlaşılması çok güçtür. 0 ve 1 ikilileri işlemcinin instruction seti doğrultusunda işleme (process) uygulanacak operasyon, operasyonun gerçekleştirileceği verinin hafızada bulunduğu adres ve hafızaya ulaşım yolları gibi bilgileri ifade edecek şekilde biraraya gelmekte ve işlemci tarafından decode edilerek gerekli işlemin yerine getirilmesi sağlanmaktadır. Diğer proglamlama dillerin gerektirdiği derleyici ya da yorumlayıcı kullanımını gerektirmediğinden ve donanımı doğrudan kontrol etme gücü olduğundan kullanılır.
Kullanılan işlemcinin komut setinden ibaret olan makina dili komutları donanıma bağımlıdır. Günümüzde kullanılan i386(32bit intel) ve i486 gibi işlemci standartlarının herbirine ait birer komut seti bulunmaktadır ve bu komut seti yalnız o mimariye yöneliktir. Bunun temelinde yatan asıl sebep işlemcinin hafıza birimi üzerinden okuduğu bir veri parçasının(bir ya da birkaç bayt ) işlemciye bir emir teşkil edicek bir ifade olabilmesi için bu veri parçasının işlemci üzerinde donanımsal olarak bir işleme karşılık gelmesi gerekliliğinden kaynaklanır.

Örneğin: 1 0011 0111 gibi 9 bitlik bir wordu düşünecek olursak burada sol baştaki 1 biti indirect adresleme yapıldığını, bu bitten sonraki 4 bit olan 0011 çarpma işleminin yapılması gerektiğini geriye kalan 4 bit 0111 ise hafızanın 0111 adresine gidilmesi gerektiğini belirtebilmektedir. Bu düzen tabi ki farklı işlemci mimarileri için farklı olacaktır.
Bir Çevirme Dili (Assembly Language) bilgisayar programlarının yazılmasında kullanılan alt seviyeli bir dildir. Assembly dili programlarının yazılımında insan dostu sembollerin “mnemonics” kullanılması, daha fazla hataya yatkın ve zaman alıcı ilk bilgisayarlarda kullanılmış olan bir hedef bilgisayarının sayısal makine kodunda doğrudan programlama çalışmasının yerine geçmiştir. Bir assembly dil programı çevirici “Assembler” olarak adlandırılan faydalı bir program tarafından hedef bilgisayarın makine koduna çevrilir. (Bir çevirici bir derleyiciden (compiler) farklıdır, bu genellikle “mnemonic” ifadelerden makine komutlarına teke tek (izomorfik) çeviriler yapar.)
Assembly dili karmaşık programlar yazmak için kullanılan düşük seviyeli bir proglama dilidir. Assembly insanlar tarafından anlaşılması zor olan makine dilinin s ayısal ifadelerini, insanlar tarafından anlaşılarak programlanması daha kolay olan alfabetik ifadelerle değiştirerek düşük seviyede programlama için bir ortam oluşturur. Assembly kullanmanın amacı, ilk bilgisayarlarda yazılan programların daha az hata içermesi ve daha az zaman almasını sağlamaktır.
Assembly dilini makina koduna çeviren programlara assembler denir. Bir assembler'ı derleyiciden ayıran en önemli özellik bire bir dönüşüm yapmasıdır. Derleyiciler kodun tamamını okurlar ve kodun tamamını anlamlı bir programa dönüştürürler. Kodun her satırını tek tek okuyan ve uygulayan programlara ise yorumlayıcı denir.
Assembly dil programları, genellikle platformdan bağımsız olan yüksek seviyeli programlama dillerinin aksine bir hedef bilgisayar mimarisine sıkı sıkıya bağlıdır ( ve bu bilgisayara özeldir). Çok fazla sofistike olan çeviriciler programın gelişmesini kolaylaştırmak, çeviri işlemini kontrol etmek ve hataların düzeltilmesine yardımcı olmak amacıyla mekanizmalar kullanarak program komutlarının temel çevirisini genişletir.
Assembly dili bir zamanlar programlamada çok fazla kullanılmaktaydı, ancak günümüzde daha az kullanılma eğilimindedir, öncelikle doğrudan donanım manipülasyonunun veya anormal performans hususları söz konusu olduğu zaman bu dil kullanılmaktadır. Tipik uygulamaları cihaz sürücüleri, alt seviyeli dahili (embedded) sistemleri ve gerçek zaman uygulamalarıdır.

İşletim sistemi, bilgisayarın açılışı esnasında hafızaya yüklenen ve yüklendikten sonra diğer yazılımların çalışması için bir temel görevi gören bir yazılımdır. Diğer yazılımlara genel olarak "uygulama" yazılımları adı verilir. Uygulama yazılımları, işletim sistemi tarafından sağlanan temel uygulama parçacıklarını çeşitli şekillerde kullanarak değişik gereksinimlere cevap vermektedirler. Sade bir ifadeyle, işletim sistemini alfabeye benzetebiliriz. Uygulama yazılımları da işletim sisteminin ortaya koyduğu bu alfabeyle yazılan kitapçıklar, kitaplar ve ansiklopediler olarak düşünülebilir.
İşletim sistemleri arasında ne fark vardır? Farklı işletim sistemleri farklı kullanıcılara ve farklı gereksinimlere hitap ederler. Bir nükleer reaktörün kontrolünde kullanılan bilgisayarlardan beklenenler ile 13 yaşında bir çocuğun evinde kullanacağı bilgisayardan beklenenler çok farklıdır. Ev kullanıcıları için görsel kullanıcı arayüzü daha gelişmiş işletim sistemleri geliştirilirken, iş ile ilgili gereksinimleri karşılamak üzere tasarlanan işletim sistemlerinde sistem kaynaklarını görsel estetik ile harcamak yerine metin temelli arayüzler kullanılarak bilgisayarların işlem gücünün yüksek düzeyde korunması hedef alınmıştır.