
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ı