
JAVA COMMUNITY PROCESS
& OPEN JDK
TÜRKİYE'NİN EN AKTİF VE ÖNCÜ JAVA TOPLULUÄžUNA KATILIN!
1. OpenJDK Community
Java’nın açık kaynak sürümünü, JAVA SE ve diÄŸer benzer projeleri geliÅŸtirmek için çalışan bir topluluktur. 2006 yılında kurulmuÅŸtur. Aynı yıl içerisinde JDK açık kaynak olarak GPLv2 lisansı altında yayınlanmıştır. “OpenJDK” marka hakları oracle’a aittir.
OpenJDK rehberinin temel amacı geliÅŸtiricilerden gelen geri bildirimleri dikkate alarak geliÅŸtirici topluluÄŸun önerdikleri özelliklerin uygun bulunması durumunda, bunları OpenJDK’ye kazandırmak. Topluluktan gelen öneriler hakkında temel yaklaşımları ise; EÄŸer bir iÅŸi birçok kiÅŸi doÄŸru bir ÅŸekilde yapıyorsa, kullanılan yöntem yapılan iÅŸi kolay ve daha ÅŸeffaf bir hale getirir. Bu yaklaşım standartlaÅŸmış bir geliÅŸtirme sürecini ortaya çıkarır. Bu süreci oluÅŸturan ise geliÅŸtirici topluluÄŸunun ortak olarak benimsediÄŸi deÄŸer olan iÅŸ yapış ÅŸekilleridir. TopluluÄŸun bu yaklaşımından ortak olarak benimsenmiÅŸ yöntemlerin OpenJDK’ye kazandırılmasının amaçlandığı sonucunu çıkartabiliriz.
​
2. Rehberin hazırlanma amacı nedir?
​
Rehberin hazırlanma amacı OpenJDK’nın geliÅŸtirme süreci, araçlar, standartlar vb. konular hakkında geliÅŸtiricilerden gelen soruları cevaplamaktır.
​
3. OpenJDK E-posta Grupları
​
E-posta grupları dağıtık çalışabilmek iÅŸin önemli bir yapı ve tüm OpenJDK projeleri e-posta gruplarının kurulmasından sonra baÅŸlamıştır. OpenJDK’nın tüm projelerde kullanılan codebase’i Mercurial repository’sinde tutulmaktadır. Bu repo kaynak dosyalarını ve onların commit geçmiÅŸini tutmaktadır. OpenJDK ile ilgli tüm kararların alındığı e-posta listelerine mail.openjdk.java.net baÄŸlantısından ulaşılabilir. BaÅŸlıca takip edilmesi önerilen OpenJDK e-posta grubları: announce, discuss ve –dev.
OpenJDK community içerisinde e-posta gönderimi sırasında profesyonelce yazılmış e-postalar göndermek ve küresel bir kitleyle iletiÅŸim halinde olunduÄŸunun bilincinde olmakta fayda olduÄŸu topluluk rehberinde vurgulanmış. Ayrıca İngilizce grup içi iletiÅŸim için gerekli dil olsa da zaman zaman topluluk üyeleri kendi dillerinde e-posta gönderebilmektedirler. Gruplarda yer almak için mükemmel bir İngilizceye gerek duyulmamakla birlikte bu konuda topluluÄŸun katılımcılara karşı olan toleransı
yüksektir.
Bazı eposta grupları belirli konuları sürekli gündemde tutmak için moderatörler tarafından yönetilmektedir. Her bir e-posta grubu arÅŸivlenmektedir. Bu arÅŸivler sayesinde yeni katılanlar ya da mevcut üyeler geçmiÅŸe dair alınan kararları inceleyebilmektedir. E-posta grupları <name>-<suffix> ikilisi kullanılarak isimlendirilir. <name> projenin ismini ya da tartışılacak spesifik bir konunun ismidir.
​
3.1 Başlıca kullanılan e-posta grupları ve işlevleri:
Topluluk üyeleri herhangi bir respository ile ilgili görüÅŸ birdirmek için bazı ön ÅŸartlar dâhilinde linkteki e-posta gruplarından ilgilendiklerine kayıt olabilirler.
-dev: Proje ile ilgili teknik konuların kod gözden geçirmelerinin yapıldığı e-posta grubudur. Use case, project phase, project life cycle, project status, constraint, estimates, functional requirements gibi temel artifact’ler tartışılır.
​
-use: Project artifact'lerinin kullanımıyla ilgili teknik tartışmaların yapıldığı e-posta grubudur.
​
-discuss: Proje ile ilgili genel konuların tartışıldığı eposta grubudur. ÖrneÄŸin discuss(at)openjdk.java.net e-posta grubu OpenJDK projesinin konuÅŸulduÄŸu gruptur. Genellikle yeni bir proje önerisi - discuss e-posta grupları üzerinden yapılır.
-changes: İlgili projenin repository'sinde changeset bildirimlerinin tartışıldığı gruptur. Changeset projenin herhangi bir contributer’ın kendi localinde tuttuÄŸu kopyası ile merkezi repodaki farklılıkları ifade etmektedir.
-announces: Proje ile ilgili önemli duyuruların yapıldığı e-posta grubudur. Bu grup moderatör tarafından sıkı bir ÅŸekilde kontrol edilir. Moderatör e-posta trafiÄŸi düÅŸük tutmaya çalışmaktadır. ÖrneÄŸin; announce(at)openjdk.java.net e-posta grubu OpenJDK ile ilgili duyuruların yapıldığı gruptur.
​
-experts: Konunun uzmanların bulunduğu gruptur. Bu gruplara katılım kısıtlaması vardır.
​
-observers: Her üyenin katılabildiÄŸi expertler tarafından tartışılan konuları gözlemleyebilecekleri e-posta grubudur. EÄŸer bir expert isterse bir -observers e-posta grubunu takip edebilir. Bu durumda expert ile –observers’lar arasında karşılıklı e-posta trafiÄŸi gerçekleÅŸebilir.
​
-comments: Observers tarafından expertlere geri bildirim göndermek için oluÅŸturulan e-posta gruplarıdır. Genellikle bir lider observers e-posta grubunda tartışılan konuları gözden geçirir ve filtreler. Daha sonra expert e-posta grubuna bunları yönlendirir.
​
Ayrıca;
​
-
OpenJDK genel tartışmaların yapıldığı e-posta grup linki
-
OpenJDK tartışmalarının olduÄŸu e-posta grup linki (moderatör bulunmadığı için e-posta trafiÄŸi yüksek)
-
OpenJDK ile ilgili teknik konuların ve araçların tartışıldığı e-posta grup linki
-
OpenJDK board member e-posta grubunun linki
-
OpenJDK grafik rasterleÅŸtirme e-posta grup linki
-
OpenJDK kalite ile ilgili konuların tartışıldığı grup linki
​
4. Kodlama GeleneÄŸi
​
Rehberde topluluk üyelerine Java kodlama geleneÄŸi için ayrı bir baÅŸlık açılarak vurgulanmış ve Oracle’ın websitesi referans gösterilmiÅŸ. https://www.oracle.com/java/technologies/javase/codeconventions-contents.html
​
5. Topluluk Kuralları
Amaç topluluk üyelerine motivasyon saÄŸlayacak kurallar kümesi oluÅŸturup, OpenJDK’ya geliÅŸimini hızlandırmak. TopluluÄŸun oluÅŸturduÄŸu tüzük 28 Haziran 2011 yılında onaylanmıştır. Tüzük maddelerinin oluÅŸturmuÅŸ olan topluluk üyelerinde aranan tek ÅŸart, OpenJDK Mercurial repositories’ye 5 tane ciddi katkı saÄŸlayan commit yapmış olmalarıydı. Oylamada yer alan topluluk üyelerine ait listeye linkinden ulaÅŸabilirsiniz. Tüzük maddeleri yönetim kurulu üyeleri tarafından denetlenir. Yönetim kurulunun teknik konular hakkında veya sürümler ile ilgili karar alma yetkisi yoktur.
​
5.1 Genel Roller
​
Participant: Herhangi bir OPENJDK e-posta gurbunu takip eden kiÅŸilerdir. Katılımcılar e-posta gruplarında mesaj gönderebilir veya küçük katkılar saÄŸlayabilirler (submit simple patches).
​
Contributor: Oracle Contributor Agreement (OCA) anlaÅŸmasını imzalayan veya benzer bir anlaÅŸmaya uymuÅŸ ve anlaÅŸma kuralları çercevesinde topluluÄŸa katkı saÄŸlayacak kiÅŸileri ifade etmektedir. Contributor’ler yeni bir proje fikri önerebilir, mevcut projelere büyük ya da küçük (submit patches) katkılar saÄŸlayabilirler veya çeÅŸitli gruplarda ve projelerde roller alabilirler.
OpenJDK Member: Mevcut OpenJDK üyeleri tarafından tanınan ve oylanmış olan topluluÄŸa önemli katkılar yapmış kiÅŸilerdir. Bu kiÅŸiler yeni bir grup önerebilirler, bir grubun lideri olabilirler, yeni bir projede, yeni üye seçiminde ve yeni yönetim kurulu üye seçiminde oy kullanabilirler.
OpenJDK Lead: Aynı zamandaOpenJDK Member ve yönetim kurulu üyesidir. Oracle tarafından atanır. Projelere yön verme baÅŸlıca görevidir.
​
5.2 Oylama Kuralları
​
Toplulukta alınacak kararların çeÅŸitli oylanma yöntemleri vardır. Konsensus, çoÄŸunluk ve mutlak çoÄŸunluk olmak üzere üç farklı oylama ÅŸekli vardır. Bunlarda kendi içerisinde alt dallara ayrılırlar.
​
5.3 Gruplar
​
Ortak bir amaç üzerinde bir araya gelmiÅŸ katlılımcıları temsil eder. ÖrneÄŸin, dokümanstasyon, kod kalitesi, kod gözden geçirme, kod iyileÅŸtirme veya kod sürdürülebilirliÄŸi gibi konularda gruplar kurulabilmektedir.
​
5.4 Projeler
​
Projeler web tabanlı içeriklerden oluÅŸabilirler, birden fazla repodan oluÅŸabilirler ya da birden fazla e-posta grubuna sahip olabilirler. Herhangi bir contributer yeni bir proje önerebilir. Bir grup lideri bu proje fikrine sponsor olursa ve OpenJDK üyelerinin Lazy Consensus yapması sonucunda onaylanırsa proje oluÅŸturulur
​
-
JDK Release Projects: Java SE Platform projelerinin devamıdır. Bu projeler sadece OpenJDK lead tarafından önerilebilir. Yönetim kurulu tarafından sponsor olunur. OpenJDK lead aynı zamanda tüm JDK projeleriyle ilgilenen project lead’tir (Commiter). Her bir OpenJDK Member mevcut bir JDK projesine yeni bir özellik eklenmesi önerisinde bulunabilir.
​
6. Projelerdeki Roller
​
Author: Projeye yeni bir özellik ekleme yetkisine sahip bir contributer’dır. Herhangi bir repository için bir changeset oluÅŸturabilir. Fakat yaptığı deÄŸiÅŸiklikleri tek başına merkezi repoya gönderme (push) yetkisi yoktur.
​
Committer: Merkezi repository’ye Push yetkisine sahiptir. Ayrıca bir contributer’a referans olarak committer olmasını saÄŸlayabilir.
​
Reviewer: Deneyimli commiter’lardır. Project Lead tarafından belirtilmiÅŸ changesets’leri onaylama yetkisine sahiptir. Ayrıca bir commiter’ı reviewer adayı olarak önerebilirler.
​
Project Lead: Projeyi kordine eden, projeye yön veren ve aynı zamanda bir commiter’ dır. Proje ile ilgli tüm teknik konuları bilen commiter olmayan author’ları silme yetkisine sahip olan, gerektiÄŸinde belirli repository’lerde yapılacak deÄŸiÅŸiklikleri belirleme, e-posta gruplarıyla ilgilenme ve respository’lerle ilgilenme temel görevlerindendir. Ayrıca her çeyrekte proje ile activiteleri içeren raporların özetlerini yayınlamak zorundadır. Bu raporda yönetim kurulu tarafından alınan dikkate deÄŸer fonksiyonel kararlar, önemli deÄŸiÅŸiklikler, duyurlan sürümler, onaylanan ve tamalanan JSR’ler, topluluk büyüme oranı, bugfix sayısı, committer istatistikleri yer alır. Project Lead aynı zamanda reviewer’dır. Görevini bıraktığında reviewer olarak görevine devam eder.
Yeni bir proje oluÅŸturulduÄŸunda Project Lead belirlenir. Project Lead ise Authors, Committers, and Reviewers’ları belirler.
​
7. Yönetim Kurulu
​
OpenJDK topluluÄŸunu yöneten, yapısal ve operasyonel kararlar alan kiÅŸilerdir. Yönetim kurulu 5 üyeden oluÅŸur.
​
-
Başkan: Oracle tarafından atanır.
-
Başkan Yardımcısı: IBM tarafından atanır.
-
OpenJDK lideri: Oracle tarafından atanır.
-
2 OpenJDK Üyesi: BaÅŸkan ve baÅŸkan yardımcısı tarafından seçilir.
​
8. Genel GeliÅŸtirme Modeli
​
​
​
​
​
​
​
​
​
​
​
​
Örnek senaryo:
​
Contributor, merkezi sunucudaki(OpenJDK Mercurial server) repository’nin kopyasını kendi bilgisayarına (clone) kopyalar. Contributor’ler local repolar üzerinde deÄŸiÅŸikliklerini ve commit’lerini yaparlar. Changset’leri onaylandıktan sonra uzak sunucuya locallerinde bulunan repoyu push’larlar.
Ek:
​
OpenJDK’nin geliÅŸtirilmesinde yer alan kiÅŸi ve grupların bulunduÄŸu ÅŸema. (https://openjdk.java.net/census)
https://db.openjdk.java.net/people(952 kiÅŸi)
​
Terimler
​
Changeset: A collection of changes with respect to the current clone of a repository.
Mercurial: A free, cross-platform, distributed source management tool.
​
Çeviren: Burak IÅžIK
​
​

Åžekil 1: Merkezi repository ve geliÅŸtirici clone’ları