"Kod yazabiliyorum ama algoritmasını yazamıyorum"

Yıllardır bilgisayar mühendisliği öğrencilerine algoritma ve programlamaya giriş anlatıyorum. Bütün eğitim hayatları boyunca sadece problem çözmeye odaklanmış olan öğrenciler için problemi çözme süreci üzerinde düşünmek çok zor geliyor. Öğrencilerin bir kısmı üniversiteye gelmeden önce de kodlamayı bir miktar biliyor olmasına rağmen bir problemi hangi süreçleri takip ederek çözdükleri üzerine neredeyse hiç düşünmemiş oluyorlar. Bu elbette bireysel olarak onların eksikliği değil, onları bu hale eğitim sistemimiz getiriyor.

Algoritma üzerinde düşünmek aslında problemi çözmek değil de onu çözümlemek anlamına geliyor. Üniversiteye gelene kadar problem çözümlerinde hep kısa yollar, formüller öğrenmiş; kavramları, tanımları önemsememiş gençler için bunları öğrenmek ve üzerinde düşünmek zorlu bir süreç oluyor. Hemen kod yazmaya geçmek istiyorlar ama problemi çözümlemeden kodunu yazmak işlevsiz bir çaba oluyor. Algoritma yazmak veya akış şeması çizmek için harcanan zaman boşa geçiyormuş gibi geliyor genç arkadaşlara.

Bu denizi doldurmak için yapılan çalışmalara benziyor biraz. Kayaları taşıyan ilk kamyonların döktüklerinin suyun içinde kaybolup gittiğini görürüz başlarda. Sanki bir sonsuzluğun içine bıraktığımız bu kayalar asla kıyının seviyesine gelemeyecek gibidir. Eğer yeterince kayayı suya dökersek zamanla suyun yüzeyinden görülebilir olduklarını görürüz. Bu işleme sabırla devam edince kayalar suyun yüzeyini de aşarlar. Programlama öğrenme sürecinin başında algoritma üzerinde düşünürken, yazarken işte bu kayaları denize döküyoruz. Hemen ortaya bir şey çıkarmak isteyenler, for'ları, while'ları ve if'leri yazmak ve o denizi hemen doldurmak istiyorlar.

Karl Marx'ın en kötü mimarı en iyi arıdan ayıran özelliğinin mimarın yapacağı işi önce aklında inşa etmesi olarak vurgulamasını yazılım dünyası için de düşünmek hatalı olmayacaktır. 



İşin doğrusu bazı durumlarda çözülecek problem üzerinde çokça düşünmeye değecek kadar derinlikli olmuyor. Hele iş hayatında insanın karşısına sürekli meydan okumalarla dolu sorunlar çıkmıyor. Süreç üzerinde düşünme disiplini olmayan biri için her sorun böyle kolayca çözülebilir gibi geliyor olabilir ama elbette her zaman böyle olmuyor.

Bir örnekle problemin önce akılda çözülmesinin önemini göstermek istiyorum. Aşağıda bir üçgen şeklinde dizilmiş sayılara bakalım. Bize yukarıdan aşağı doğru sadece birbirine temas eden sayılarla elde edebileceğimiz en büyük toplam soruluyor olsun.
Takip edilebilecek rotaların sayısı sadece 8 olduğundan olası bütün rotaları hesaplayıp en büyüğünü seçersek 308 toplamını bulmak zor olmayacaktır. Şimdi bu sayı dizisini biraz büyütelim.

Yukarıdaki şekilde 15 satır var, yani takip edilebilecek rotaların sayısı 2^14 tane. Bu da 16384 farklı rota demek oluyor. İlkine göre bir hayli fazla olsa da burada da tüm rotaları hesaplayıp en büyüğünü seçmek imkanı var. En yavaş bilgisayarlarda bile oldukça kısa sürede hesaplanabilecek şekilde kodlamak mümkün bu yöntemi.

Peki ya satırların sayısı 100 olsaydı? Bu durumda hesaplanacak farklı rota sayısı 2^99 olacaktı. Bu da 633825300114114700748351602688 farklı rota demek olur. Bu 30 basamaklı bir sayı olduğundan bütün rotaları hesaplayarak sonuca ulaşamayacağımız herkes için çok açık olmalı. Ne bu kadar farklı rotayı hesaplayabilir ne de, hesaplasak bile, bunları bir yerde saklayabiliriz. İşte "kod yazabiliyorum ama algoritmasını yazamıyorum" diyenlerin tıkandığı nokta burasıdır. Yöntem üzerinde düşünmeyen ancak sonucu apaçık görünen problemleri çözebilir.

Buraya kadar sabırla okuyanlar için çözümü de yazıp öyle bitirmek istiyorum bu yazıyı. Çözümü 8 farklı rotanın olduğu durum için anlatacağım ama kolayca genişletebilirsiniz. Problemi yukarıdan aşağıya doğru değil de aşağıdan yukarı doğru çözmeye çalışalım. En alttaki satırın bir üstüne kadar gelmiş olsaydık en alt satırdakilerden hangisini seçerdik diye düşünelim. Yani bir şekilde 17'ye gelmiş olsaydık, en büyük toplamı elde etmek için 18'e mi, 35'e mi giderdik? Elbette 35'e gitmeliydik. Aynı şekilde 47'den de 87'ye gitmeliydik. Son olarak 82'den de 87'ye giderdik. O zaman üçüncü satırdaki her sayıdan altındaki satırdaki ulaşabildiği sayıların en büyüğüne gideceğimizi görmüş olduk. Şimdi problem şu hale geldi.

                                   75
                       95                       64
17+max(18,35)  47+max(35,87)  82+max(87, 10)

İşlemleri yapınca:

     75
   95 64
52 134 169

Aynı işlemi ikinci satır için yapalım:
                         75
95+max(52,134) 64+max(134,169)

Burada işlemleri yapalım:
     75
229 233

Aradığımız sonuç böylece 75+max(229,233)=308 olacaktır. Bir kere böyle düşünmeyi akıl ettiğimizde satır sayısının ne kadar fazla olduğunun bir önemi kalmayacaktır. Yazacağımız kod 100 satır için bir saniyede çözüm bulacakken, bunu düşünmeyenlerin yazacağı kod milyarlarca yılda sonlanmayacaktır. Algoritma hakkında düşünmek ve düşünmemek arasındaki fark işte bu büyük uçurumdur.

11 Aralık 2018

Posted In: algoritma, Gezegen, yazılım

LibreOffice için Türkçe imla denetimi eklentisi: zemberek-extension

Zemberek-NLP Ahmet A. Akın ve Mehmet D. Akın'ın 10 yıldan uzun zamandır geliştirdikleri bir özgür yazılım projesi. Proje Türkçe için doğal dil işleme araçları içeriyor [1]. Bir dönem Pardus tarafından kullanımı ile çok bilinen bir projeydi ama bir süre hem Pardus sahipsiz kaldı, hem de Zemberek geliştiricileri gönüllü olarak yaptıkları işe bir süre ara verdiler. Zemberek sadece imla denetimi işini yapmıyor olsa da son kullanıcıya en çok ulaştığı yer burası. Özellikle LibreOffice kullanıcılarının imla denetimi yaptırabilmeleri ciddi bir ihtiyaç.

Zemberek-NLP bu yıl içinde yeniden geliştirilmeye başlandı. Uzun yıllardır el değmemiş olan LibreOffice eklentisi de baştan hazırlandı [2]. Eklentiyi hazırlama kısmında Okan Özdemir ve Talha Kanyılmaz da çalıştılar. Eklenti henüz ilk sürümünde olduğundan hatalar içerebilir. Deneyip geri bildirimde bulunulursa çok iyi olur. Kurulum ve diğer konular için eklentinin sayfasına bakılabilir.


[1] https://zembereknlp.blogspot.com
[2] https://github.com/COMU/zemberek-extension

4 Aralık 2018

Posted In: Gezegen, libreoffice, Özgür yazılım, zemberek, zemberek-extension

Google Summer of Code 2018

Bu yıl kabul edilen bizim çocuklar:

Dara Akdağ: Upgrading Ontology Tagging at WikiPathways

Cem Başsoy: Designing a Generic Tensor Library for Boost.uBlas

Semih Serhat Karakaya:  Integration of Nextcloud/ownCloud as Storage and User File Provider

Kaan Sancak: PathwayMapper Improvements and Integration into cBioPortal

Alper Çakan: WebVLMC (Remote UI for VLMC)

Mert Tümer: LibreOffice Android Viewer

Talat Uyarer: Redis Implementation For Gora

Ahmet Tanakol: Generating JSON Editors based on JSON Schema

Doğukan Çelik: A calendar database of social events and conferences

Furkan Tokaç: Improve handling for touchpads and mice with Libinput

Ahmet Çandıroğlu: Improvements for Newt, a Cytoscape.js based SBGN editor





Meraklısı için: 2006200720082009201020112012201320142015, 2016, 2017

23 Nisan 2018

Posted In: Gezegen, gsoc, haber

Hangi Masaüstü Ne Kadar Türkçe Konuşuyor? -10-

Dönem dönem düşen masaüstü ortamlarının çeviri oranlarının çok yükseldiği bir zamanda yazabildiğim için mutluyum. Aşağıdaki rakamlara bakınca bir GNU/Linux dağıtımı kullanmanın önündeki (eğer varsa) engellerden birinin yerelleştirme olmadığını rahatça söyleyebiliriz sanırım.

KDE: Geçen yıl %81 olan KDE çeviri oranı büyük bir artış göstererek %94 seviyesine çıktı. Daha önce neredeyse hiç çevirisi olmayan yardım içeriğinin de %8'i Türkçeye çevrildi. Çok yakında daha yükseğe çıkacağını tahmin ediyorum. KDE'nin en çok yerelleştirildiği 12. dil Türkçe.

GNOME: Geçen yıl %90 olan çeviri oranı %99'a yükseldi. Yardım içeriği neredeyse hiç çevrilmeden duruyor.

Enlightenment: Geçen yıl %74 olan çeviri oranı %73'e geriledi.

XFCE: Xfce web sayfası da dahil olmak üzere %100 çeviri oranına sahip.

LXDE: Lxde projesinde yer alan bütün yazılımlar %100 Türkçe çevirisine sahip.

LibreOffice: Özgür ofis paketi LibreOffice'de çeviri durumu çok iyi. Bütün sürümlerin arayüzleri %100 Türkçe'ye çevrilmiş durumda. Yardım içerikleri de %99 civarında yerelleştirildi.

Çevirmenlerin ve onlara destek olanların eline sağlık!

1 Ekim 2017

Posted In: Çeviri, Enlightenment, Gezegen, Gnome, kde, libreoffice, Lxde, Xfce

XXII. Türkiye’de İnternet Konferansı, Akademik Bilişim 2018 ve 3. Kamu Açık Kaynak Konferansı

Türkiye'de İnternet Konferanslarının yirmi ikincisi bu yıl 2-4 Kasım 2017 tarihlerinde Bahçeşehir Üniversitesinde yapılacak.

3. Kamu Açık Kaynak Konferansı ise 25-26 Ekim 2017 tarihleri arasında ATO Congresium'da düzenlenecek.

Yirminci Akademik Bilişim Konferansı için Karabük Üniversitesi ev sahibi olacak ve 31 Ocak - 2 Şubat 2018 tarihlerinde gerçekleşecek.

Bilişim camiasının bu üç büyük buluşmasını takvimlerinize şimdiden işaretleyin de sonradan keşke haberim olsaydı demeyin.

20 Eylül 2017

Posted In: akademik bilişim, ankara, Gezegen, inet-tr, istanbul, kak, karabük, konferans

Özgür yazılım ile açık kaynağın ne farkı var?

Özgür Yazılım hareketi 1983'de başlayan ve kullanıcıların yazılımları çalıştırma, anlama, değiştirme ve değiştirdikleri halini dağıtma özgürlüklerini savunan bir harekettir. Açık Kaynak ise neredeyse aynı ilkeleri farklı ifadelerle savunan ve 1998'de ortaya çıkan, özgür yazılım topluluğunun içinden çıkan bir oluşumdur. Özgür Yazılım hareketinin başlatıcısı Stallman açık kaynağı bir yazılım geliştirme metodolojisi, özgür yazılımı ise bir sosyal hareket olarak görmektedir. Stallman uzun yıllardır neden kendisini bir açık kaynak savunucusu olarak kabul etmediğini yazılarıyla ve konuşmalarıyla anlatıyor olsa da çok fazla anlaşıldığı söylenemez. Bu yazıda ikisi arasında bir fark var mı ve biz hangi ifadeyi kullanmalıyız konularını tartışmak istiyorum.

Lisans

Bir yazılımla ne yapabileceğinizi belirleyen şey onun özgür yazılım veya açık kaynak olması değil o yazılımın kullandığı lisanstır. Temel kavramları aynı bile olsa her özgür yazılım lisansı aynı kullanım şartlarını sunmaz. Watcom lisansı gibi neredeyse kimsenin kullanmadığı lisansları bir tarafa bırakırsak bütün açık kaynak yazılım lisanslarının aynı zamanda özgür yazılım lisansı olarak kabul edildiğini görürüz. Konuya lisanslar açısından bakınca özgür yazılımlar ile açık kaynak yazılımlar arasında bir fark yoktur [3].

Yanlış anlamalar

Türkçe konuşan insanlar olarak "free software" ifadesinde yaşanan "bedava" mı "özgür" mü karışıklığını yaşamıyor olmamıza rağmen "open source" yazılım denildiğinde sadece kaynak kodu açık olan yazılımın anlaşılması gibi sorunla, İngilizce konuşanlar gibi, karşı karşıya kalıyoruz. Özgür yazılım denildiğinde arkasında yazılımın ve kullanıcıların özgürlüklerini önemseyen, onun için mücadele eden bir felsefe olduğunu anlamak kolay olmasına rağmen maalesef onun hakkında da kafa karışıklığı az değil. Genel Kamu Lisansı (GPL) en bilinen özgür yazılım lisanslarının başında geliyor olmasına rağmen tek özgür yazılım lisansı değil. GPL özgür yazılımın dört şartına ek olarak Copyleft kavramını da kullanmaktadır. Özgür yazılımın şartları yazılımı sizin nasıl haklarla edineceğinizi belirlerken Copyleft onu nasıl dağıtmanız gerektiğini söyler. Yani Copyleft özelliğine sahip bir lisansla lisanslanmış bir yazılımı yine aynı şartlarla dağıtmanız gerekir [1]. Bütün özgür yazılım lisanslarının böyle bir zorunluluğu olmamasına rağmen maalesef genel kanı bu yönde ülkemizde.

Açık kaynak ise ülkemizde en az anlaşılan kavramlardan biri. Bunda adının yaptığı çağrışımın etkisi de büyük elbette. Hem kullanıcılar, hem de önemli miktarda geliştirici bir yazılımın kaynak kodunu görebildiğinde onu açık kaynak sanmak gibi bir kavramsal hataya düşüyor [2]. Github benzeri bir kod barındırma ortamına yazılımının kaynak kodlarını koyan bir yazılımcı onun hemen açık kaynak olduğu yanılgısına kapılıyor.

Açık kaynak yanlış anlaşılmaya çok müsait olduğundan açık kaynak ifadesini her kullandığımızda onun kaynağı açık olan yazılım anlamına gelmediğini ve mevcut 10 şartını anlatmak oldukça zor bir iştir. Bunu yapmadığımızda hem özgür yazılım hem de açık kaynak hareketlerinin uğraştıkları konuları önemsememiş oluruz. Özgür yazılım dediğimizde birilerinin kafasını karıştırma riski oldukça düşüktür. Günümüzde gittikçe artan bir hızla özel mülk yazılımların da kaynak kodlarının açıldığını hesaba katarak, insanları yanlış yönlendirmemek için açık kaynak yerine özgür yazılım ifadesini kullanmak daha doğru bir hareket olacaktır.

Düşmanımız açık kaynak değil özel mülk yazılımdır

Özgür yazılım taraftarları olarak sıklıkla açık kaynak ifadesini özgür yazılım olarak düzeltiyoruz. Bunu kafa karışıklığına neden olmamak için yaptığımız halde, istemeden de olsa, sanki açık kaynağın kötü bir şey olduğu algısını da yaratabiliyoruz. Halbuki durum böyle değil. Özgür yazılım ve açık kaynak hareketleri kullanıcıların özgürlüklerini savunan hareketlerdir. Biz özgür yazılım savunucuları açık kaynağı düşman olarak görmeyiz. Hem özgür yazılımın hem de açık kaynak yazılımın insanlık için kötü olarak kabul ettiği yazılımlar özgür olmayan (özel mülk) yazılımlardır.
We in the free software movement don't think of the open source camp as an enemy; the enemy is proprietary (nonfree) software.

[1] http://www.nyucel.com/2017/05/genel-kamu-lisansnn-gpl-onemli-fark.html
[2] http://www.nyucel.com/2017/05/ack-kaynak-sadece-kaynak-koda-erisim.html
[3] http://www.nyucel.com/2017/05/ozgur-yazlm-m-ack-kaynak-m-1.html

28 Mayıs 2017

Posted In: Açık kaynak, Gezegen, Lisans, Özgür yazılım

Özgür Yazılım mı Açık Kaynak mı?

Yazılım lisansları son kullanıcı tarafında neredeyse hiç okunmayan metinler olmalarına rağmen yazılım geliştiriciler arasında bile yaygın olarak okundukları söylenemez. Elbette son kullanıcının yazılım lisansıyla ilişkisi geliştiriciden çok farklıdır. Elindeki yazılımı nasıl değiştireceği, başka bir yazılım içinden nasıl çağırabileceği, statik mi dinamik mi derlemesi gerektiği, kendi koduna birlikte dahil edebileceği yazılımların lisanslarının nasıl olması gerektiği gibi konularla ilgilenmez son kullanıcı. Bu bahsettiğim durumlarda geliştiricilerin nasıl davranması gerektiği lisans metinlerinde genellikle ayrıntılı olarak tarif edilir.

Son kullanıcı genellikle yazılımı özgürce kullanabiliyor mu, başkasıyla paylaşabiliyor mu, gelecekte de kullanabilecek mi, güvenli mi gibi konularla ilgilenir. Son kullanıcının yazılımın lisansını okumadan da onunla ilgili neler yapabileceğini öğrenmesinin bir yolu yazılım lisansının hangi sınıfa girdiğini ve o sınıftaki yazılımların belirleyici özelliklerini bilmesidir. Eğer yazılım bir özgür yazılımsa onunla yapılabilecek şeyler çok kısa ve net bir şekilde belirlidir [1]. Biraz daha fazla madde içeren açık kaynak bir yazılımın şartları da net olarak tarif edilmiş durumdadır [2]. Örneğin elde ettiğiniz yazılım GPLv3 ile lisanslanmışsa ve bu lisansın bir özgür yazılım lisansı olduğunu biliyorsanız diğer ayrıntılarla çok ilgilenmeden onu gönül rahatlığıyla kullanabilirsiniz.

Özgür yazılım ve açık kaynak lisanslarıyla ilgili şartları okuduğunuzda aradaki farkı kolayca anlamanız mümkün olmayabilir. Bu sizi tedirgin etmesin zaten büyük kalabalıkların da durumu böyle. Bir yazılıma açık kaynak dediğinizde biri sizi "hayır o özgür yazılım" diye uyarıyorsa "arada ne fark var?" diye sorun. Çok büyük ihtimalle açıklayamayacaktır. Bu yazıyı çok uzatmamak için aradaki kavramsal ayrılıkları bir başka yazıya bırakıp burada hangi lisanslar özgür yazılım, hangileri açık kaynak kategorisine giriyor göstermek istiyorum.

Hangi lisansların özgür yazılım kategorisine girdiğini görmek isteyenler buraya [3], açık kaynak yazılım lisanslarının hangileri olduğunu görmek isteyenler buraya [4] bakabilirler. Özgür yazılımla ilgili bağlantıya bakarsanız (biliyorum çoğunluk bakmayacak) hangi lisansların GPL-uyumlu olduğunu, hangilerinin GPL uyumlu olmasa da özgür yazılım olduğunu görebilirler. Hangi lisansların özgür yazılım lisansı olarak kabul edilmediği de nedenleriyle birlikte açıklanmış durumda. Bir lisansın GPL-uyumlu olması o lisansla yazılmış bir kodun GPL lisanslı bir yazılıma dahil edilip dağıtılabileceği anlamına gelir.

GPLv3 uyumlu özgür yazılım ve açık kaynak lisansları


Aşağıdaki lisanslar hem GPLv3-uyumlu özgür yazılım lisansları, hem de açık kaynak lisanslarıdır. Sayıları sizi şaşırtacak kadar fazla olan bu lisansların listesi şöyle:
  • 2-clause BSD License (BSD-2-Clause)
  • 3-clause BSD License (BSD-3-Clause)
  • Apache License 2.0 (Apache-2.0)
  • Artistic License 2.0 (Artistic-2.0)
  • Boost Software License (BSL-1.0)
  • CeCILL License 2.1 (CECILL-2.1)
  • EU DataGrid Software License (EUDatagrid)
  • eCos License version 2.0
  • Educational Community License, Version 2.0 (ECL-2.0)
  • Eiffel Forum License V2.0 (EFL-2.0)
  • GNU Affero General Public License version 3 (AGPL-3.0)
  • GNU General Public License version 2 (GPL-2.0)
  • GNU General Public License version 3 (GPL-3.0)
  • GNU Lesser General Public License version 2.1 (LGPL-2.1)
  • GNU Lesser General Public License version 3 (LGPL-3.0)
  • Historical Permission Notice and Disclaimer (HPND)
  • ISC License (ISC)
  • MIT License (MIT)
  • Mozilla Public License 2.0 (MPL-2.0)
  • Python License (Python-2.1)
  • Sleepycat License (Sleepycat)
  • Universal Permissive License (UPL)
  • W3C License (W3C)
  • wxWindows Library License (WXwindows)
  • Zope Public License 2.0 (ZPL-2.0)
  • zlib/libpng license (Zlib)

GPLv3 uyumlu olmayan özgür yazılım ve açık kaynak lisansları

Bazı özgür yazılım lisansları GPL-uyumlu olmayabiliyor. Genel Kamu Lisansının diğer özgür yazılım lisanslarından farkını daha önce yazmıştım, belki okumak isteyebilirsiniz şimdi [1]. GPL uyumlu olmadığı halde özgür yazılım lisansı olan lisansların sayısı da az değil. Bunların arasından açık kaynak lisansı olarak da adı geçenlerin listesi de şöyle:
  • Academic Free License 3.0 (AFL-3.0)
  • Apple Public Source License (APSL-2.0)
  • Common Public Attribution License 1.0 (CPAL-1.0)
  • Eclipse Public License 1.0 (EPL-1.0)
  • European Union Public License, Version 1.1 (EUPL-1.1)
  • IBM Public License 1.0 (IPL-1.0)
  • LaTeX Project Public License 1.3c (LPPL-1.3c)
  • Lucent Public License Version 1.02 (LPL-1.02)
  • Microsoft Public License (MS-PL)
  • Microsoft Reciprocal License (MS-RL)
  • Mozilla Public License 1.1 (MPL-1.1)
  • Nokia Open Source License (Nokia)
  • Open Software License 3.0 (OSL-3.0)
  • PHP License 3.0 (PHP-3.0)
  • Q Public License (QPL-1.0)
  • RealNetworks Public Source License V1.0 (RPSL-1.0)
  • Sun Public License 1.0 (SPL-1.0)
  • Zero Clause BSD License (0BSD)

Açık kaynak olduğu halde özgür yazılım olmayan lisanslar

Peki açık kaynak olduğu halde özgür yazılım lisansı olarak kabul edilmeyen lisanslar neler? diye soruyor olmalısınız şimdi? Eğer özgür yazılımın ve açık kaynağın şartlarını okumuşsanız bunun kolay kolay sağlanamayacak bir durum olduğunu biliyor olmalısınız ama [3] ve [4] adreslerinde adı geçen ve bu şartı sağlayan sadece bu kadar az lisans olduğunu okumak sizi şaşırtacaktır sanırım. Eğer bu lisanslardan biriyle lisanslanmış bir yazılıma açık kaynak derseniz doğruyu söylemiş olurken, özgür yazılım derseniz hatalı bilgi vermiş olursunuz.
  • NASA Open Source Agreement 1.3 (NASA-1.3)
  • Reciprocal Public License 1.5 (RPL-1.5)
  • Sybase Open Watcom Public License 1.0 (Watcom-1.0)
Buraya kadar sabırla okuduysanız bütün özgür yazılımların doğal olarak açık kaynak olduğunu biliyor olmalısınız. Bu bilgilerden sonra neredeyse bütün açık kaynak yazılımların da özgür yazılım olduğunu görmüş oldunuz.

Arada hiç mi fark yok?

Her ne kadar neredeyse bütün açık kaynak yazılımlar özgür yazılım olmanın kriterlerini yerine getiriyor olsalar da doğrusu yazılım kendisini nasıl tanımlıyorsa o terimi kullanmaktır. Örneğin Genel Kamu Lisansı ile lisanslanmış bir yazılım kendini açık kaynak olarak tanımlıyorsa ona açık kaynak demek doğrusudur ama tersini söylemekte de teknik olarak hatalı bir durum olmadığı herkesçe açık olmalı.

Özgür yazılım ve açık kaynak aynı şey mi?

Yukarıda okuduğunuz şeylere rağmen özgür yazılım ve açık kaynak farklı dünya görüşlerini temsil eden fikirler. Bu konu hakkında ayrı bir yazı okumak isterseniz buradan okuyabilirsiniz.

[1] http://www.nyucel.com/2017/05/genel-kamu-lisansnn-gpl-onemli-fark.html
[2] http://www.nyucel.com/2017/05/ack-kaynak-sadece-kaynak-koda-erisim.html
[3] https://www.gnu.org/licenses/license-list.html
[4] https://opensource.org/licenses/alphabetical

20 Mayıs 2017

Posted In: Açık kaynak, Gezegen, Lisans, Özgür yazılım

Özgür yazılım penceresinden WannaCry

Birkaç gündür neredeyse bütün haberlerde bir fidye yazılımı olan WannaCry hakkında okuyoruz. Microsoft'un bütün işletim sistemlerini etkileyen bir samba açığından faydalanan bu yazılım kullanıcıların bilgisayarlarındaki dosyaları şifreledikten sonra 300$ ödeme yapmaları halinde bu durumdan kurtulabileceklerini anlatan bir mesaj gösteriyor. İşin teknik kısmı hakkında çokça yazılıp çizildiğinden bu yazıda başka bir konudan; özgür yazılımın yaşananlara nasıl bakması gerektiğinden bahsetmek istiyorum. Sadece Microsoft'un işletim sistemlerini etkileyen bu büyük açığı bir avantajmış gibi kullanmadan önce aşağıdaki konularda düşünmemiz gerekiyor.


Neden özgür yazılım kullanılsın istiyoruz?

Biz özgür yazılımları daha güvenli oldukları, daha hızlı oldukları veya daha özelleştirilebilir oldukları için mi kullanıyoruz? Toplam sahip olma maliyetleri daha düşük diye mi özel mülk yazılımlar yerine özgür yazılımları tercih ediyoruz? Özgür yazılımlar bu saydığım avantajlara hatta daha fazlasına sahip oldukları halde sahipli yazılımlar karşısındaki gerçek üstünlükleri bunlar değil elbette. Özgür yazılımları herkesin istediği amaçlar için çalıştıramadığı, programın nasıl çalışabildiğini anlayamadığı, ihtiyacına uygun şekilde değiştiremediği, elindeki yazılımı dağıtmasının önünde kısıtlamaları olan sahipli yazılımlarla karşılaştırmaya buradan başlamamamız gerekir. Eğer temel argümanımız hız, güvenlik, ucuzluk olursa yarın sahipli bir yazılım bu konularda öne geçtiğinde söyleyecek sözümüz kalmaz. Kendimizi kandırmayalım bazıları hali hazırda bu konuların bazılarında daha ilerideler ama biz yine de özgür yazılımları kullanma taraftarıyız. İnsanların özgürce kullanıp, dağıtamadığı yazılımları özgür yazılımlarla kıyaslamaya başlamadan önce onların minimum insani ihtiyaçları karşılamaları gerekir [1]. İnsanlara, şirketlere, kamuya neden özgür yazılımlar kullanmaları gerektiğini doğru argümanlarla açıklamak çok önemli [2].

Özgür yazılım kullanılsaydı benzer bir durumla karşılaşılamaz mıydı?

Elbette karşılaşılabilirdi. Hatta karşılaşıldı da. GNU/Linux ve *BSD'lerde en çok kullanılan kabuk olan bash'in bu hatayla karşılaştırılabilecek büyüklükte bir hatası olan shellshock ancak 25 yıl sonra farkedilebildi. Bash'in kaynak kodları bu süre boyunca hepimizin gözlerinin önündeydi hem de. Bu yazdıklarımdan elbette kaynak kodların erişilebilir olmasının güvenlikle ilgili olumlu etkisinin olmayacağı anlamı çıkartılmamalıdır [3]. Bugün yaygın olarak kullanılan bir özgür yazılıma eklenen kodlara dünyanın her köşesinden geliştiriciler, geliştirici adayları ve meraklılar bakıyor. Kaynak kodlarını göremediğimiz bir yazılıma bir arka kapı kolaylıkla eklenebilirken aynı şeyi bir özgür yazılıma yapmak (imkansız demeyeyim ama) çok çok zordur. Durum böyle olmasına rağmen özgür yazılımlarda güvenlik sorunu hiç olmaz dememek gerekir, çünkü yaşadığımız örnekler var. Bugün wannacry sadece Windows'ta yaşanıyor siz GNU/Linux kullanın dersek yarın shellshock benzeri bir durumda söyleyecek sözümüz kalmaz. Bizim temel argümanımız özgürlük olmalıdır ve bu GNU/Linux kullanın demek için yeterlidir.

Microsoft'un neredeyse kimsenin kullanmadığı samba-v1'e hala destek veriyor olması görülmedik bir şey midir?

Geriye uyumluluk bütün yazılımların ciddi sorunlardan biri durumunda maalesef. Eski sürümlere destek verildiğinde böyle şeyler olabilirken desteğin kesilmesi de başka sorunlara yol açabiliyor bazen. Windows10'a bile samba-v1.0 desteğini vermesi elbette Microsoft'un kabahati ama bu hiç yapılmayan bir yanlış da değil. Neredeyse her yerde TLS 1.2 kullanılırken SSL'in eski sürümlerine verilen desteğin suistimal edilmesi yüzünden yaşadığımız şeyler üzerinden çok da uzun zaman geçmedi. Microsoft zamanında Windows'lardan bu desteği kaldırabilirdi ve bu onu daha iyi bir işletim sistemi yapmazdı. Bizim windows ve diğer sahipli işletim sistemlerini kullanmayın dememizin arkasında yatan şey onların tasarım ve planlama hataları değil özgür olmamalarıdır.

Microsoft Windows XP kullanıcılarına bir şey borçlu mu?

Microsoft'un Windows XP'yi piyasaya sürüş tarihi 2001. Elimizi vicdanımıza koyup konuşalım hangi işletim sistemine 16 yıl destek veriliyor? Dört yıl önce XP desteği artık sona erdi diye de yazdılar. XP çıktığı tarihte piyasada olan Debian 2.2 veya Redhat 6.2 için destek alamadığından şikayetçi kimse var mı? Aradan geçen bunca yılda kamunun kaynaklarını bir özgür işletim sistemine geçişte kullanmamış ve hala Windows XP kullandıran yöneticiler kusura bakmasınlar ama suçun önemli bir kısmı onları üzerinde. 

WannaCry'dan etkilenenler elbette sadece XP kullanıcıları değil bütün Windows sürümlerinin kullanıcıları oldu ama tahmin edilenin çok üzerinde XP kullanıcısı olduğu da görülmüş oldu. Bir kurumun yöneticisi arka planda ne yaptığını bilmediği, en temel insani ilkelere uygun olmayan bir işletim sistemini kullandırıyorsa suçu Microsoft'a atamaz bence.

GNU/Linux veya BSD'ler Windows'un alternatifi mi?

Özgür yazılımdan, özgür işletim sistemlerinden sanki Windows'un alternatifiymiş gibi bahsetmeyi kabul edilemez buluyorum. Bu konuda daha önce çokça yazdığım için tekrarlamak yerine aşağıya bağlantılarını bırakıyorum. [4], [5], [6]

16 Mayıs 2017

Posted In: Gezegen, gnu, güvenlik, linux, microsoft, Özgür yazılım, wannacry

Genel Kamu Lisansının (GPL) önemli farkı: Copyleft

Özgür yazılım sade ve güçlü bir mekanizma üzerine kurulu bir felsefe. Özel mülk yazılım lisansları nasıl firmaları koruyan hükümler içeriyorsa özgür yazılım lisansları da kullanıcıları, yani toplumu korumaya çalışıyorlar. Bir yazılım lisansının özgür yazılım lisansı kabul edilebilmesi için ilgili yazılımla ilgili aşağıdaki dört temel özgürlüğü garanti etmesi gerekiyor:
  • Yazılımı herhangi bir amaç için çalıştırma özgürlüğü,
  • Yazılımın nasıl çalıştığını öğrenme ve onu değiştirme özgürlüğü,
  • Yazılımı yeniden dağıtma özgürlüğü,
  • Yazılımın değiştirilmiş halinin dağıtılabilmesi özgürlüğü.
Elbette bunlar çok genel hükümler ve bunları sağlayan çok sayıda özgür yazılım lisansı mevcut. Lisans metinleri çoğunlukla ayrıntıları da tanımlayan, özel durumlarda nasıl davranılması gerektiğini tarif eden hukuki metinler. Yazılım geliştiricilerin bu lisans metinlerini okumamak gibi bir lüksü olamaz çünkü yaptıkları iş açısından çok belirleyici metinler bunlar. Yazılımlar hemen hemen her zaman başkalarının yazdıkları kitaplıkları içerdiğinden geliştiricilerin hangi kitaplıkları kendi yazılımına dahil edip edemeyeceğini, hangi kitaplıkları bir arada kullanabileceğini bu metinlerden başka öğrenebilecekleri bir alternatifleri yoktur.

Aslında kullanıcılar da bir yazılımı kullanmadan önce onun getirdiği kısıtlamaları ve sağladığı özgürlükleri öğrenebilmek için bu lisansları okumalı ama hem metinler yer yer teknik ifadeler içeriyor hem de çok uzunlar. Asıl bağlayıcı metinler İngilizce olanlar olmasına rağmen Linux Kullanıcıları Derneğinin kamuoyunun kullanımına sunduğu Özgür Yazılım Lisansları sayfası oldukça yararlı olacaktır. Eğer yazılım geliştiricisi değilseniz özgür yazılımın temel kavramlarını ve kullandığınız yazılımın bir özgür yazılım olduğunu bilmek yeterli bir güven zinciri oluşmasını sağlayabilir.

İdeal bir dünyada yukarıdaki dört şart yeterli olabilecekken günümüz dünyasında özgür yazılımların özel mülk yazılımlara dönüştürülmesinin önüne geçmek için bazı önlemler almak gerekmektedir. Genel Kamu Lisansının yukarıdaki şartlara ek olarak getirdiği en önemli farklılık Copyleft'tir.


Copyleft yazılımınızın mevcut halinin ve/veya değiştirilmiş halinin de özgür yazılım olarak kalmasını garantilemenin bir yoludur. Copyleft bir özgür yazılımı alan kişilere onun özgün halini ve/veya değiştirilmiş halini yine özgür yazılım olarak dağıtmaları gerektiğini söyler. Yani elde ettiğiniz Copyleft özelliğine sahip bir yazılımı aldığınız özgürlükleri aynen devretmeden dağıtamazsınız. Bu şartın bütün özgür yazılımlara ait olmadığını sadece Copyleft'in bir getirisi olduğunu akıldan çıkartmamak gerekir. Bütün özgür yazılımların böyle zorunlulukları yoktur. Bazı özgür yazılım lisansları aldığınız yazılımın kaynak kodunu kapatıp özel mülk yazılım olarak dağıtmanıza bile izin verir. GPL Copyleft özelliğini taşıyan bir özgür yazılım lisansıdır. Özgür yazılımların bir listesi için bu adrese bakabilirsiniz.

Copyright, yani telif hakkı, kullanıcıların özgürlüklerini kısıtlamak için kullanılan bir terim iken Copyleft bu özgürlüklerin devam etmesini garanti altına almaya yöneliktir. Adının çağrıştırdığının aksine Copyleft, Copyright'ın tersi değil onu kullanmanın bir yoludur. Copyleft yazılımın telif hakkından vazgeçmek anlamına gelmediği gibi eğer telif hakkından vazgeçerseniz Copyleft'in kullanımının şartları ortadan kalkmış olur. Yani telif hakkına sahip olmadığınız bir yazılımın nasıl dağıtılacağına zaten karışamazsınız.

Yazdığınız kodu Genel Kamu Lisansıyla nasıl lisanslayabileceğinize dair bu yazıyı da okumak isteyebilirsiniz.

11 Mayıs 2017

Posted In: copyleft, Gezegen, gpl, Lisans, Özgür yazılım

Google Summer of Code 2017

Bu yıl kabul edilen bizim çocuklar:

Memduh Gökırmak: Crimean Tatar-Turkish MT

Mustafa Özçelikörs: A4MCAR: A Distributed and Parallel Demonstrator for Eclipse APP4MC

Okan Aşık: JdeRobot GSOC'17 Application for Visual HFSM Project

Altay Adademir: Project IX: Expanding the Extension Manager

Asil Kaan Bozcuoglu: Knowledge and Learned Model Exchange Between Robotic Agents using openEASE

Gökhan Gurbetoğlu: Improvements to Notebookbar

Muhammet Kara: Revamp the Customization dialog

Hasan Balcı: Cytoscape.js Extension for Querying Large Networks

Duygu Keşkek: SunPy Website Improvements

Candan Eylül Kilsedar: OSM extrusion adapter

Semih Serhat Karakaya: Security App

Alperen Karaoğlu: Performance Co-Pilot Project Proposal: Blocked process detection and reporting

Canberk Koç: Store integration for Taler merchants



Meraklısı için: 2006200720082009201020112012201320142015, 2016

4 Mayıs 2017

Posted In: Gezegen, gsoc, haber