24 Ekim 2017 Salı

C Dilinde String Fonksiyonları Kullanımı

Strlen fonksiyonu
Yazının kaç karekter uzunlukta olduğunu bulan fonksiyonun prototipi aşağıdaki gibidir.
unsigned int strlen (char *str) 

Fonksiyon uzunluğu belirlenecek yazının başlangıç adresini parametre olarak alır ve geriye yazının uzunluğunu döndürür.



Strchr fonksiyonuStrchr "string character" sözcüklerinin kısa biçimidir. Bir karekter dizisi(yazi) içinde belli bir karekteri aramak için kullanılan fonksiyodur.Prototipi aşağıdaki gibidir.
char * strchar (char *str, char ch) 

İkinci paramtere ile belirtirln karakteri str adresinden başlayarak arar. ch karakterinin ilk görüldüğü yernin başlangıç adresini geri döndürür. Eğer ch karekteri yazı içinde yoksa bu sefer geri dönüş değeri NULL olmaktadır.



Strcpy fonksiyonu

Strcpy, String ve Copy sözcüklerinin kısaltılmış halidir. Fonksiyonun ikinci parametresinde bulunan yazının başlangıç adresinden başlayarak ,birinci paramteresinde bulunan adrese NULL karekter de dahil olmak üzere kopyalar. Prototipi şöyledir;
char * strcpy (char *hedef , char * kaynak) 

Fonksiyonun geri dönüş değeri kopyalamanın yapıldığı hedef adresidir.




Strcat fonksiyonu
Fonksiyon ismini "String" ve "Concatanate" sözcüklerinden alır. Bu fonksiyon bir karekter dizisini başka bir karekter dizisinin sonuna eklemek için kullanılır. Prototipi şu şekildedir;
char * strcat (char *str, char *ek) 

Fonksiyonda parametre olarak belirtilen birinci yazının sonuna ikinci paramterede belirtilen yazı eklenerek, eklemenin yapıldığı adres yani str adresi geri döndürülür.Bu fonksiyonu kendimiz yazmamız için önce str yazısının sonuna kadar gitmemiz sonrada ek teki yazıyı str ’nin sonundan itibaren kopyalamamız gerekir.


Strcmp fonksiyonu
Fonksiyonun ismi String ve Compare sözcüklerinin kısaltılmış halidir. Parametre olarak verilen iki yazı dizisinin ASCII karekter tablosuna göre karşılaştırır. Küçük harfler ASCII tablosunda büyük harflerden daha sonra geldiği için "sefer" yazısı "SEFER" yazısından daha büyüktür. "Mehmet" yazısı "Metin" yazısından daha küçüktür, çünkü eşitliği bozan ’h’ karakteri ’t’ karekterinden daha önce gelmektedir. Prototipi aşağıdaki gibidir

int strcmp (char *str1 , char * str2) 

Parametre ile verilen iki yazı karşılaştırılır ve geri dönüş değeri, birinci yazı ikinci yazıdan büyükse pozitif bir değere, birinci yazı ikinci yazıdan daha küçükse negatif bir değere , birinci yazı ve ikinci yazı eşit ise sıfır dır.

3 Ekim 2017 Salı

Git ve GitHub

Git bir versiyon kontrol sistemidir. SVN olarak da adlandırılan bir sistemdir. SVN, SubVersioN(alt sürüm) kelimesinin kısaltılmış halidir. Bir dosya üzerinde tek başınıza ya da ekip olarak çalıştığınızı düşünün. Siz ya da ekibiniz küçük veya büyük fark etmez aynı dosya ile çalışmak ve hızla ilerlemek zorundasınızdır. Bu çalışmanızda en fazla sıkıntı veren durum ekipteki kişilerin yaptığı düzenlemelerin, yine ekipteki birisinin yaptıklarıyla çakışmasıdır. Sizin yaptığınız bütün değişiklikler, diğer ekip üyesinde var olmayacağı için o dosyayı farkında olmadan sizin yaptıklarınızın üzerine atar ve bir anda tüm yaptıklarınız ezilir, kaybolur. Aynı şekilde tek başınıza çalışıyor da olabilirsiniz. Mutlaka başınıza gelmiştir. Çalıştığınız dosya da bir değişiklik yapıp kaydettiğinizde ve sonrasında o değişikliğe ihtiyacınız olduğunda geri dönememeniz ve o verinin kaybolması da aynı durumdur.
Bu sebeple Git gibi versiyon kontrol sistemleri de bu sıkıntıları gidermek için oluşturulmuştur. Her ekip üyesinin yaptığı değişiklikler ayrı ayrı ele alınarak, üst üste gelmeyen(çakışmayan) değişiklikler(örneğin aynı satırda yapılmış değişiklikler) yoksa kolayca birleştiriliyor. Eğer üst üste gelen(çakışan) satırlar varsa bu konuda yardımcı olarak kolayca birleştirmemize yardımcı oluyor. Fakat dosya üzerinde yapılan tüm değişiklikleri, saklayarak ta istenildiğinde görülebilmesini ve istenilen revizyona geri dönülebilmesini de sağlıyor.
Kısaca yazılımcılar için olduğu kadar bir belge üzerinde sürekli revizyon yapanlar içinde geçmişe yönelik revizyonları tutan bir sistemdir.

GitHub ise  versiyon kontrol sistemleri için(örneğin Git) uzak bir depo(repository)dur. Uzak depo demek, bir havuz olarak da düşünülebilir. Birçok yazılımcının bir araya geldiği, bir projenin kopyası üzerinde çalışarak projenin alt sürümlerini çıkardığı ya da çeşitli ihtiyaçlarını giderdiği ve yaptığı değişikliği havuza gönderdiği bir sosyal kodlama alanıdır. 
GitHub üzerinde yapılmış bir projenin bir kopyasını alıp, bilgisayarınızda çalışıp yaptığınız değişiklikleri proje sahibine GitHub sitesi üzerinden gönderebileceğiniz gibi, sizde bir hesap oluşturarak GitHub üzerinde proje oluşturabilirsiniz

C Programlama Dili Derleyicileri

1. Notepad++
Notepad++ adından da anlaşılacağı gibi bir metin düzenleme aracı, tabii bunun yanında birçok özelliği de var. Özellikle herhangi bir dilde kodlama ile uğraşıyorsanız çok işinize yarayacak bir araç.Desteklediği kodlama dilleri şöyle; C, C++, Java, C#, XML, HTML, PHP gibi birçok dili destekler. Bu da C dili için uygun bir derleyici olduğunu göstermektedir.

2. Tutorials Point – Online Compiler
Son dönemde bulut tabanlı sistemlerin arttığını görüyoruz. Bunun örneklerinden birisi de herhangi bir kurulum yapmadan web tarayıcımız üzerinde kod yazarak çalışabileceğimiz web siteleri. Tutorials Point web sitesinde birçok dil için online derleyici bulunuyor. C çalışmak için kullanmaya da uygundur.
3. Dev C++
Eski bir geliştirme ortamı olmasına rağmen Dev-C++ da C ve C++ çalışmaları yapmak için kullanılabilir. 
4. Microsoft Visual Studio
Visual Studio, Microsoft firmasının Windows işletim sisteminde yazılım geliştirmek için sunduğu tümleşik geliştirme ortamı. Oldukça gelişmiş özelliklere sahip bu platformda C++, C# ve VB dillerinde yazılım geliştirilebiliyor. C++ derleyicisinde C kodları yazmanız mümkün. Visual Studio’nun “Community” versiyonu ücretsiz olarak kullanılabiliyor. 

C Programlama Dili Tarihçesi

C Programlama Dili genel amaçlı yapısal bir programlama dilidir. C dili Dennis Ritchie tarafından 1972’de AT&T Bell Telephone Labaratuarlarında B dilinden geliştirilmiştir. C dili, B* ve BCPL** nin önemli genel kavramlarının çoğunu içerir. C dili konusundaki ilk kitap, 1978’de Brian Kernighan ve Dennis Ritchie tarafından yazılmıştır.
1983 yılında C programlama dili standardize etmek amacıyla toplanan bir komite ANSI C*** (American National Standart Institute) standardını tanımlamıştır. C başlangıçta birçok kişi tarafından UNIX işletim sistemini geliştiren dil olarak biliniyordu.(UNIX işletim sisteminin 1000 satırlık bölümü C ile yazılmıştır). Ama günümüzde hemen hemen bütün büyük işletim sistemleri C ya da C++ ile yazılmıştır. Ayrıca Nesneye Yönelik programlama dilleri (C++,Java ve C# gibi) ve script dilleri (JavaScript,JavaApplet,PHP gibi) gibi programlama dilleri tamamen C tabanlıdır.
C donanımdan bağımsız (machine independent) ve taşınabilirdir (portable). Taşınabilirlik,aynı programın farklı donanımlarda ve farklı işletim sistemlerinde işletilebilirliğini ifade eder. Örneğin, Windows işletim sisteminde yazılan bir C kodu, Linux,UNIX, veya VAX gibi işletim sistemlerinde de derlenebilir.
Bir dilin verimliliği (productivity), hızlı fakat fazla yer kaplamayan yazılımlar geliştirmeye olanak sağlaması ile ölçülür. C programlama dili verimli, basit ,fakat güçlü yapısından ve bu dilde geliştirilen uygulamaların taşınabilir olmasından ötürü yaygın olarak kullanılmaktadır.

21 Eylül 2017 Perşembe

Compiler (Derleyici) Nedir?

Basitçe bir dilde yazılmış olan kodu (kaynak kodu yada source code) istenilen başka bir kod haline dönüştüren programdır. Genelde üretilen bu kod ortama göre çalıştırılabilir kod (executable code) olarak üretilmektedir. Ancak bir derleyicinin daha doğru tanımı bir dildeki kodu başka dile çeviren program olarak yapılabilir. Örneğin C dilinde yazılan bir programı PASCAL diline çeviren programlara derleyici adı verilebilir.
Derleyicinin diğer bir tanımı ise daha üst seviye bir dilden daha alt seviyeli bir dile tercüme olarak kabul edilebilir. Buna göre örneğin C dilinden Assembly veya makine dili gibi daha alt dillere tercüme ile derleyici kavramı daha da sınırlandırılmış olarak kabul edilebilir.
Derleyiciler günümüzde daha çok bir dilde yazılmış koddan, işletim sistemi ve donanım bağımlı kodların üretilmesinde kulllanılmaktadırlar.
Bu üretim sırasında ya doğrudan işletim sisteminin anlayacağı ve çalıştıracağı kodları üretirler ya da işletim sisteminde bulunan veya yine dil bağımlı olarak çalışan bağlayıcı (linker) programların anlayacağı ara kodları üretirler.Derleyiciler bu kod üretmesi sırasında, üretilen kodun en verimli şekilde üretilmesi için kod iyileştirmesi (optimisation) da yapmaktadırlar. Yani hedef dildeki çalışma süresi ve hafıza ihtiyacı en az olan kodu üretmek bir derleyicinin daha başarılı olma kriterlerinden birisidir.Aynı zamanda kaynak kodda (source code) bulunan hataların yakalanması bu hataların programcıya bildirilmesi de derleyicilerin diğer görevlerinden birisidir.

2017-2018 Programlama Dilleri

Programlama Dili Nedir?

Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını istediğini anlatmasının tek tipleştirilmiş yoludur. Şu ana kadar 2500’den fazla programlama dili yapılmıştır. Bunlardan bazıları Pascal, Basic, C, C#, C++, Java, COBOL, Perl, Python, Ada, Fortran, Delphi ve 1C Enterprise'dır. Bir programın çalışması demek, Mikroişlemciye daha önceden hazırlanmış bir kod yığınının gönderilmesi demektir. Bu kodlar işlemcinin anlayacağı ASM dilinde yazılmış kısa kodlardır, ASM en hızlı programlama dili olmakla beraber, kullanılması en zor programlama dilidir.ASM dili için kısaca bilgisayarın anadili diyebiliriz, çünkü CPU sadece ASM 
kodlarını anlayacak bir yapıya sahiptir. Ilk çıktığı günlerde sadece ASM dili olduğu için program yazmak gerçekten çok zordu. Bu yüzden üst seviye programlama dilleri geliştirilmiştir.

1 Mart 2017 Çarşamba


HARF EKLE FONKSİYONUYLA HARFLERİ EKRANA YAZAN  PROGRAM





MALLOC VE FREE  KOMUTLARI


20 Şubat 2017 Pazartesi

C++ Yeni Örnekler

1-İsmini ve yaşını ekrana yazdıran program (C++)









2-KDV'yi 0 18 sabit olarak tanımladıktan sonra 500 TL için ödenecek 
KDV miktarı hesaplama(c++) 




3- Cout komutunu yaz olacak şekilde değiştirme 




4 - #define kullanarak iki sayıdan büyük olanı ekrana yazan program 




5) 1 -10 arası döngüyü #define kullanarak kısaltma





19 Şubat 2017 Pazar

CLASS DEFINITON

Bir programda sınıf(class) yapmak istiyorsak aşağıdaki gibi bir yapıda olmak zorundadır.

class name
 {
   public
        >> constructor(s)
        >> destructo
        >> function members 
        >> data members 
   protected
        >> function members
        >> data members 
   private 
        >> function members
        >> data members
 }



 PUBLİC


 Her yerden erişime açıktır.Fonksiyon yada değişkenler dışarıdan değer alabilirler.

Cunstructor(s):(Yapılandırıcı veya kurucu olarak adlandırılır) fonksiyon,kendi sınıfı icerisindeki(genelde private olan uyeler) uyeleri veya olusturdugu nesnenin ilk cikis sahnesini olusturan fonksiyonlardir.Nesneler,genelde yaratılırken ilk deger atamalarını kendi kurucu fonksiyonlari sayesinde yaparlar.Boyle bir kural sart degildir,ancak nesne yönelimli programlama dilleri(object oriented programming) uzerinde kod yazan programcılar genelde bu yaklaşım ile sınıflarını tasarlarlar.Bakıldıgı zaman programın optimizasyonu acısından da constructor fonksiyonları cok yararlıdır.

Destructors: (Yıkıcı , Yok edici) olarak adlandırılan fonksiyonlar ise,constructor fonksiyonunun yaptıgı işin tersini yaparlar,yani gorevi biten nesneyi yok ederler.Bir sınıfın(class) uyesi olan bir degisken(orn:string tipli) gorevini noktaladigi durumda ~destructor() fonksiyonu otomatik cagrilarak,uzerinde calistigi nesneyi devre dışı bırakır.C++ programlama dili icerisinde destructor'lar bulunurken,java dilinde bu fonksiyonlar kaldırılmıştır.Nedeni ise,programlama zafiyeti acısından eger iyi tasarlanmazsa,bu fonksiyonlar programa ciddi zararlar verebilirler.
Destructor() fonksiyonları olmasada,constructor() fonksiyonlari aşırı yuklenebilir.Bu durumu fonksiyon parametrelerini degistirerek uygulayabilirsiniz.Ancak bu fonksiyonlarin donus tipi belirtilmemektedir. 
-C++ programlama dilinde bu sistemlerin initalize edilmesi asagidaki gibi tasarlanır:
 
class class_name { // Bir class
 
class_name(); // Bir constructor
class_name(int,float); // Aşırı yuklenmiş Bir constructor
~class_name(); // Bir destructor
};

Function members: Bir nesne dahili olarak saklanan ve o nesneye özgü işlevler içerebilir. 
Bu tür her bir işlev , sınıfta bir prototip olarak uygun bir deklarasyona ihtiyaç duyar.
İşlev üyeleri sıradan işlev olabilir, ancak aşırı yüklenebilir , 
varsayılan parametre değerlerine sahip olabilirler veya sanal olabilirler.


PRİVATE 

Private üyelere o sınıf dışından herhangi bir şekilde erişilemez ve bu üyeler kalıtım yoluyla aktarılmaz.. Private olarak tanımlanan değişken ve fonksiyonlar sadece o sınıfın kendi metotları tarafından kullanılabilir. Yani işin özü o metod veya değişken sadece o sınıfa özel olur.
Bir değişkeni private olarak tanımladığınızda ve bu değişkenin başka bir sınıf tarafından kullanılması gerektiğinde bu değişkeni döndüren bir public fonksiyon yazarak işlemi gerçekleştirebilirsiniz.


PROTECTED

Protected aslında private'ye benzer. Protected özelliği atanan bir değişken veya metot, sadece sınıf içerisinden veya türetilen bir sınıf içerisinden erişilebilir.. Yani bir sınıf extend ettiği sınıfın protected üyelerine erişebilir ama private üyelerine erişemez.


18 Şubat 2017 Cumartesi

IDE NEDİR? C++ İÇİN KULLANILAN IDE'LER

IDE (Integrated Development Environment), yazılımcının hızlı ve rahat bir şekilde program geliştirebilmesini amaçlayan, geliştirme sürecini organize edebilen birçok araç ile birlikte bu sürecin verimli kullanılmasına katkıda bulunan araçların tamamını içerisinde barındıran bir yazılım türüdür. Tümleşik geliştirme ortamlarında olması gerekli en temel özellikleri aşağıdaki gibidir:
  • Programlama diline göre sözdizimi renklendirmesi yapabilen bir kod yazım editörü.
  • Kod dosyalarının hiyerarşik olarak görülebilmesi için hazırlanmış gerçek zamanlı bir dizelge.
  • Tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı.
  • Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları.
En popüler IDE’lerden birkaç tanesine örnek verelim :
Eclipse, Microsoft Visual Studio, Code::Blocks, Dev-C++, Anjuta, KDevelop, NetBeans…
COMPİLER NEDİR?

Basitçe bir dilde yazılmış olan kodu (kaynak kodu yada source code) istenilen başka bir kod haline dönüştüren programdır. Genelde üretilen bu kod ortama göre çalıştırılabilir kod (executable code) olarak üretilmektedir. Ancak bir derleyicinin daha doğru tanımı bir dildeki kodu başka dile çeviren program olarak yapılabilir. Örneğin C dilinde yazılan bir programı PASCAL diline çeviren programlara derleyici adı verilebilir. Derleyicinin diğer bir tanımı ise daha üst seviye bir dilden daha alt seviyeli bir dile tercüme olarak kabul edilebilir. Buna göre örneğin C dilinden Assembly veya makine dili gibi daha alt dillere tercüme ile derleyici kavramı daha da sınırlandırılmış olarak kabul edilebilir. Derleyiciler günümüzde daha çok bir dilde yazılmış koddan, işletim sistemi ve donanım bağımlı kodların üretilmesinde kulllanılmaktadırlar.


DEBUGGER NEDİR? NE İŞE YARAR?

Bilgisayar programcıları arasında oldukça sık kullanılan terimlerdir. Tam karşılıkları böcek ve böcekten arındırmadır. Bir programın umulmadık noktalarında hatalar varsa ve program zaman zaman yanlış çalışıyorsa, o programda BUG (Böcek) bulunduğuna ilişkin cümleler kullanılır. Bu hataların bulunarak düzeltilmesi sürecine DEBUG adı verilir. Bu deyimin bilgisayar terminolojisine girmesinin hikayesiyse oldukça ilginçtir.
MARK II elektromekanik bilgisayarı için 1950 li yıllarda program geliştiren Grace Hopper isimli ünlü kadın programcı, hatalı çalışan programındaki problemi bir türlü bulamamaktaydı. Uzun aramalar sonucunda, bilgisayarın röleleri arasında sıkışmış kalmış bir böcek ölüsünün bütün sorunların kaynağı olduğu anlaşılmıştı.
Buradan da anlaşılacağı gibi Debugger hata ayıklayıcı demektir. Derleyici programın arka planında çalışarak yazılan kodlar arasındaki hataları bulmaya çalışır.


LİNKER NEDİR?

Bir derleyici tarafından üretilmiş olan kodları bağlayarak işletim sisteminin çalıştırabileceği tek bir kod üreten programdır.
Günümüzde hızla gelişen programlama ihtiyaçları sonucunda programlamada modüler yaklaşıma geçilmiştir. Buna göre büyük bir yazılım küçük alt parçalara bölünmekte ve her parça ayrı ayrı işlenerek büyük program elde edilmektedir. Yapısal programlamanın da çıkış sebeplerinden birisi olan bu yaklaşıma göre dillerde fonksiyon desteği gelmiş ve değişik parametrelere göre aynı kodun farklı sonuçlar üretmesi sağlanmıştır. Daha sonradan gelişen nesne yönelimli programlama bu konuda bir sonraki nesil olarak kabul edilebilir. Nesne yönelimli programlamada, programlar nesnelere bölünerek farklı bir yaklaşım izlenmiştir.
Bu yaklaşımların derleyicilere yansıması da uzun sürmemiş, daha yapısal programlamanın ilk geliştiği günlerde derleyiciler de farklı kütüphaneler ve bu kütüphaneleri birleştirmeye yarayan harici programlar kullanmaya başlamışlardır.
Kodun birden fazla parçaya bölünmesi ve her parçanın ayrı ayrı üretilmesi durumunda bu parçaların birleştirilmesi ve tek bir program halinde üretilmesinden sorumlu olan programlara bağlayıcı (linker) adı verilmektedir.


GUİ (Graphical User Interface) NEDİR?

Grafiksel Kullanıcı Ara yüzü, elektronik cihazların simgeler, ikonlar ve diğer görsel grafikler yardımıyla kullanmasına yardımcı olması amacıyla geliştirilmiş tasarımlardır. GUI öncesi komut bazlı işletim sistemi kullanılan eski nesil bilgisayarlar ve elektronik cihazlarda herhangi bir işlemi gerçekleştirmek için komut satırı kullanılıyordu. Kullanıcılar bilgisayar üzerindeki her işlemi klavye üzerinden ve komutları kullanarak gerçekleştiriyordu. Daha sonra kullanıcıların daha rahat kişisel bilgisayar kullanabilmesi için 1981 yılında aralarında Alan KayDouglas Engelbart ve bir grup araştırmacının yer aldığı grup Xerox PARC' da ilk GUI' yi geliştirmiştir. Daha sonraları grafiksel kullanıcı ara yüzü fikrini Apple benimsemiş ve Lisa ismiyle çıkış yapan bilgisayarında kullanmıştır.  Bugün artık aktif olarak gelişimi devam ettirilen işletim sistemlerinin neredeyse tamamı grafiksel kullanıcı ara yüzünü kullanmaktadır.

GNU NEDİR?

GNUçekirdeği, sistem araçlarını, açıcılarını, kütüphanelerini ve son kullanıcı yazılımlarını içeren, GNU Tasarısı kapsamında geliştirilen bir işletim sistemidir. İsminin açılımı "GNU's Not Unix" (GNU Unix değildir)’dir. Bu ismi almasındaki sebep de tasarımının Unix'e benzerken kendisinin özgür yazılım olması ve herhangi bir UNIX kodunu içermemesidir.
GNU işletim sistemi planı 1983 Eylül'ünde Richard Stallman tarafından duyurulmuş, 1984 Ocak ayında işleyişe başlamıştır. 2006 itibarıyla GNU hâlâ etkin olarak gelişmektedir. GNU'nun geliştirilmesi GNU Tasarısı tarafından gerçekleştirilmektedir ve bu tasarı altında birçok GNU belgeleri ve yazılımları bulunur.
Günümüz itibarıyla hâlâ tamamlanmış bir GNU sistemi sunulmamıştır. Resmi çekirdeği GNU Hurd'dür ancak Hurd henüz bitmemiştir zira geliştirilmesi aşamasında bazı lisans sorunları yaşanmış ve yapısal değişikliğe gidilmiştir. Linux'un da devreye girmesiyle birçok GNU kullanıcısı Linux çekirdeğine geçiş yapmış böylece Linux, Hurd'ün yerini doldurmuştur. GNU resmi olarak başka yazılımları da desteklemektedir (Xorg ve TeX gibi).
Sistemin başlıca içeriği GNU Compiler Collection (GCC), GNU Binary Utilities (binutils), bash kabuğu, GNU C kütüphanesi (glibc) ve coreutils'den oluşur. Görsellik açısından X.Org'u; yazım açısından da TeX yazılımlarını kullanır. Tüm GNU yazılımları halen GNU Hurd çekirdeğiyle uyumlu değildir.
Linux çekirdeğini kullanan kullanıcılar sistemlerini genel olarak "Linux" demektedir ancak GNU Projesi "Linux" yerine "GNU/Linux" denmesini önerir. Çünkü Linux, bünyeside GNU araçlarını barındırmaktadır. Bu konudaki tartışma uzun süredir devam etmektedir.
Birçok GNU yazılımları diğer işletim sistemlerinde de kullanılmıştır (WindowsBSDSolaris ve Mac OS gibi).

GNU Genel kamu lisansı (GPL), GNU Lesser General Public License (LPGL) ve GNU Free Documentation License (GFDL) GNU tarafından yazılmıştır ancak bambaşka birçok diğer konuda da kullanılmaktadır. GNU kamu malı olarak görülmektedir ve başarisinin arkasında olan da herkese olan açıklığıdır. Her kullanıcı GNU'yu geliştirebilir.


GPL (General Public Licence - Genel Kamu Lisansı) NEDİR?

GNU Genel Kamu Lisansı (GNU GPL ya da GPL) birçok yerde kullanılan ücretsiz yazılım lisansıdır ve özgün hali Richard Stallman tarafından GNU projesi için yazılmıştır. Bu lisansın en son sürümü (GPLv3), 29 Haziran 2007'de çıkmıştır. GNU Kısıtlı Genel Kamu Lisansı yani LGPL ise GPL'in bazı yazılım kütüphaneleri için yazılmış sürümüdür. 


GPL'in genel nitelikleri 
GPL lisans anlaşması, 1983 yılında Richard Stallman tarafından geliştirilmiş, çok akıllıca detaylarla bağlayıcılığı bulunan, teşvik edici, gerek kullanıcı gerekse üretici tarafa büyük olanaklar sağlayan bir lisans türüdür. GPL'in en çok üzerinde durduğu konu yazılımların kaynak kodu ile birlikte dağıtılmasının gerekliliğidir. Üretici firma yazılımını binary olarak dağıtsa bile kaynak kodunu da herkes tarafından erişilebilir bir yere bırakmak zorundadır. Kullanıcı, bu kaynak kodu alıp inceleyebilir, üzerinde istediği değişikliği yapabilir, kendi projelerinde, yazılımlarında kodun tamamını ya da bir parçasını kullanabilir. Hatta başkasının kod parçasını alıp birkaç değişiklik yapıp, satarak maddi kazanç da elde edebilir. Ama tek bir şartla, yeni üretilen program da GPL ile lisanslanmak zorundadır. 

GPL, yazılımın ücretlendirilmesi hakkında hiçbir fikir beyan etmez. GPL yazılımları ücretsiz olmak zorunda değildir. Üretici firma ya da kuruluş, yazılımını GPL ile lisanslayıp, dağıtabilir ve karşılığında da bir ücret talep edebilir. Bu madde en baştan beri sözleşme içerisinde olmasına rağmen, GPL yazılımların çok büyük bir kısmı ücretsizdir. Genel yaklaşım yazılımdan değil, kullanıcıya sunulan kurulum, eğitim, yönetim ve ek modül yazma gibi süreçlerden para kazanılması şeklindedir. Bu özelliği ile GPL pek çok lisanstan ayrılmaktadır. 

OPEN SOURCE (Açık Kaynak Kod) NEDİR??

Açık kaynak kodlu yazılım, kaynak kodları herkese açık olan yazılımdır. Bunun anlamı, onun üzerinde herhangi bir değişiklik yaparak kendi sürümünüzü meydana getirebileceğinizdir. Normalde bir programı çalıştırdığınızda onun kaynak kodlarına erişemezsiniz. Yani uygulamanın size sunduğu işlevleri nasıl sunduğunu göremez, onun özelliklerinde herhangi bir değişiklik yapamazsınız. Bunu taşındığınız, yeni yapılmış bir ev örneğine benzetebiliriz. Evin her şeyi hazırdır, elektrik hattı, su boruları ve diğer altyapı duvarların arkasına gizlenmiştir. Örneğin elektrik hattınızda bir sorun meydana geldiğinde, hatlara erişemiyorsanız elektrikçinin gelip sorunu gidermesinden başka  yapabileceğiniz bir  şey yoktur.Kapalı kaynak kodlu yazılımlarda da durum buna benzer. Bu tür programlarda programın geliştiricisine bağlısınızdır, herhangi bir sorun gördüğünüzde onu düzeltmeniz mümkün olmaz.