اخباردانستنی‌ها

آشنایی با برنامه جدید انتشار نسخه‌های جاوا

شرح امکانات نوین جاوا 9 در سایت‌‌‌ها و وبلاگ‌‌‌ها ادامه دارد. هنوز بسیاری از برنامه‌نویسان از نسخۀ قبلی استفاده می‌کنند و عموم شرکت‌‌‌ها به این نسخه مهاجرت نکرده اند. در چنین فضایی شاهد خبر انتشار جاوا 10 بودیم و بر اساس خبر‌‌‌‌ها، نسخۀ 11 تا سپتامبر 2018 (کمتر از شش ماه دیگر) عرضه خواهد شد. آیا با این سرعت عرضۀ پی در پی نسخه‌‌‌‌‌های جاوا، از پیگیری سیر پیشرفت، عقب می‌مانیم؟

اوراکل برنامۀ انتشار و پشتیبانی نسخه‌‌‌‌‌های آتی جاوا را تغییر داده است. هدف از این کار تسهیل توسعه این زبان اعلام شده است. همزمان با  انتشار جاوا 9، JCP اعلام کرد برای نام‌گذاری نسخه‌‌‌‌‌های مختلف نیز استاندارد جدیدی خواهد داشت. پس از جاوا 9 نام هر نسخه، در قالب YY.M هم اعلام خواهد شد. به عنوان مثال نسخۀ 10 به تاریخ انتشار مارس‌2018 به این شکل بیان می‌شود: (JDK 10 (18.3

تغییر برنامه انتشار

مارک رینهولد[1] معمار ارشد تیم پلتفرم جاوا در شرکت اوراکل می‌گوید: «اگر می‌خواهیم جاوا با پلتفرم‌‌‌‌‌های توسعۀ دیگر که با سرعت بیشتری در حال تکامل هستند رقابت کند، باید چالاک‌تر شود.» خلاصۀ تغییر برنامه انتشار عبارت است از «کوتاه‌تر کردن دوره‌‌‌‌‌های انتشار و عرضۀ باینری‌‌‌‌‌های OpenJDK»

تفاوت OpenJDK با OracleJDK

اجازه دهید قبل از شروع بحث، اشاره‌ای به تفاوت OpenJDK و OracleJDK داشته باشیم:

همان‌طور که می‌دانید JDK شامل JRE و ابزار‌هایی برای کامپایل و دیباگ یا به عبارت دیگر توسعۀ کد‌‌‌‌‌های جاوا است. JRE نیز شامل کتاب‌خانه‌‌‌‌‌های استاندارد جاوا، JVM، Java Plugin و Web Start است.

OpenJDK پیاده‌سازی ‌‌متن‌باز نسخۀ استاندارد جاواست و شرکت اوراکل و مشارکت‌کنندگانی از خارج این شرکت در حال توسعۀ OpenJDK هستند. از نسخۀ 7 جاوا، OpenJDK به عنوان پیاده‌سازی رسمی استاندارد‌‌‌‌‌های Java SE اعلام شد.

OracleJDK نسخه‌ای است که تیم اوراکل مسئولیت نگهداری از آن را بر عهده دارد. OracleJDK نیز از کد‌‌‌‌‌های پایۀ OpenJDK استفاده می‌کند؛ در نتیجه تفاوت بنیادینی بین این دو وجود ندارد. OpenJDK تحت استاندارد GPL و OracleJDK تحت توافقنامه Oracle Binary Code License منتشر می‌شود. OracleJDK علاوه بر کد‌‌‌‌‌های موجود در OpenJDK حاوی پیاده‌سازی اوراکل از Java Plugin و Java WebStart و کد‌‌‌‌‌های ‌‌متن‌باز و بستۀ دیگری همچون Rhino، Graphic Rasterizer و … است. توزیع‌‌‌‌‌های عمدۀ لینوکس مانند Ubuntu و Fedora نسخۀ OpenJDK را به عنوان نسخۀ JDK پیش فرض نصب و عرضه می‌کنند. جالب است بدانیم، پیاده‌سازی‌‌‌‌‌های دیگری نیز توسط شرکت‌هایی مانند twitter، FreeBSD، Red Hat و … انجام شده است.

حال به موضوع اصلی بازمی گردیم:

برنامه انتشار نسخه‌‌‌‌‌های مختلف جاوا،  تاکنون به این شکل بود: به طور متوسط در هر دو سال یک نسخه منتشر و در قالب آن یک یا دو ویژگی مهم و محوری و چند ویژگی فرعی عرضه شود. شیوۀ انتشار قبلی نسخه‌‌‌‌‌های جاوا (Major Feature Driven Release) به لموزین تشبیه می‌شود. در هر نسخه باید ویژگی‌‌‌‌‌های مهمی تکمیل می‌شد. در نتیجه هنگامی که یک ویژگی آماده عرضه نبود، تاریخ انتشار به تعویق می‌افتاد. این کار شبیه انتظار لموزین برای سرنشین مهم بود. در مدل قدیمی نیز بین نسخه‌ها به‌روز‌رسانی‌هایی وجود داشت اما ‌نمی‌توانستند حاوی ویژگی‌‌‌‌‌های مهم جدیدی باشند، چرا که نسخۀ به‌روز‌رسانی ‌نمی‌تواند Java Specification را تغییر دهد. در مدل انتشار قدیمی عموما ویژگی‌‌‌‌‌های تکمیل شده‌ای وجود دارد که منتظر تکمیل دیگر پروژه‌‌‌ها می‌ماند، چرا که همه باید در یک نسخۀ بزرگ رونمایی شوند.  اتفاقی که هنگام عرضۀ جاوا 9 چندین بار تکرار شد.

در شیوۀ جدید (Strict Time Based) که به یک قطار تشبیه می‌شود، انتشار یک نسخه منتظر تکمیل پیاده‌سازی یک ویژگی‌‌ نمی‌ماند. در فواصل زمانی منظم و شش ماهه نسخۀ جدیدی منتشر می‌شود که می‌تواند حاوی تغییرات عمده یا ویژگی‌‌‌‌‌های بزرگ و نوین در زبان باشد. در واقع ویژگی‌هایی که پیاده‌سازی آن‌ها تا تاریخ انتشار تکمیل شده است در آن نسخه گنجانده می‌شود. تنها مشکلی که در مورد این شیوه وجود دارد، دشوار بودن به‌روز‌رسانی و پشتیبانی از تعداد زیاد نسخه‌‌‌‌‌های موجود در بازار است. طبیعی است امکان نگهداری و پشتیبانی از تمام نسخه‌‌‌ها به صورت هم‌زمان و بلند‎مدت برای اوراکل مقدور نباشد. اوراکل و مجموعۀ OpenJDK اعلام کردند با الهام از طرحِ انتشار و پشتیبانی برخی از سیستم عامل‌‌‌‌‌های مشهور، نسخه‌هایی دارای پشتیبانی بلندمدت (LTS: Long Term Support) ارائه خواهند کرد.

به عنوان مثال، هر نسخۀ استاندارد اوبونتو به مدت 9 ماه پشتیبانی می‌شود، نسخه‌‌‌‌‌های LTS هم برای دسکتاپ و هم برای سرور به مدت 5 سال پشتیبانی می‌شوند. این پشتیبانی شامل به‌روزرسانی‌‌‌‌‌های امنیتی و حساس است. خلاصۀ این طرح در شکل زیر قابل مشاهده است:

فریم‌ورک‌‌‌‌‌های مشهوری نیز از این شیوه استفاده می‌کنند، Django مربوط به زبان Python تقریبا هر هشت ماه یک بار یک Feature Release عرضه می‌کند. Patch Release‌‌‌ها هر زمان که نیاز باشد منتشر می‌شوند و با Feature Release قبلی کاملا سازگارند. نسخه‌‌‌‌‌های LTS به مدت طولانی (حدود 3 سال) به‌روز‌رسانی‌‌‌‌‌های امنیتی را دریافت می‌کنند.

اوراکل نیز نسخه‌‌‌‌‌های شش ماهه را Feature Release نام‌گذاری کرده است. با توجه به این که تاکنون نسخه‌‌‌ها در عمل تقریبا با توالی سه ساله منتشر شده‌اند، فواصل نسخه‌‌‌‌‌های LTS نیز همین مقدار در نظر گرفته شده است. نسخه‌‌‌‌‌های قدیمی (6، 7 و 8) بر اساس برنامۀ قبلی پشتیبانی خواهند شد.

دو گروه از مخاطبان وجود دارند که انتشار نسخه‌‌‌‌‌های مختلف جاوا را پیگیری می‌کنند:

  1. برنامه‌نویسان که مشتاق در اختیار داشتن آخرین و به‌روز‌ترین ویژگی‌‌‌ها هستند و
  2. شرکت‌‌‌‌‌های بزرگ (Enterprise‌ها) که پایداری و پشتیبانی JDK در نظر آن‌ها مهم‌تر است. آن‌ها عموما تا زمانی که می‌توانند پشتیبانی و به‌روز‌رسانی‌‌‌ها را داشته باشند ترجیح می‌دهند در نسخۀ پایدار قبلی بمانند و از مشکلات احتمالی حاصل از تغییر نسخه ایمن باشند.

مدل انتشار جدید، هم به اندازه کافی سریع است که سختی چشم به راه قطار بعدی بودن را کم کند و هم به اندازه‌ای کند است که رسیدن به درجۀ بالایی از کیفیت در انتشار و حفظ ویژگی‌‌‌‌‌های اصیل جاوا یعنی سازگاری با نسخه‌‌‌‌‌های قبلی، قابل اتکا بودن و توسعۀ سنجیده را حفظ کند. به این ترتیب، نیاز‌‌‌‌‌های هر دو نوع از مخاطبین نیز برآورده می‌شود.

در طرح جدید Feature Release‌‌‌ها به شکل باینری‌‌‌‌‌های OpenJDK و تحت مجوز GPL منتشر می‌شوند که کاملا برای برنامه‌نویسان پیشرو مناسب است و می‌توانندآز آن استفاده کنند، آن را تغییر دهند، و در هر قالبی که مایلند – در Container‌‌‌‌ها، Image‌‌‌‌‌های Docker، فضای کلاود یا همراه سیستم عامل‌‌‌‌‌های شخصی سازی شده‌شان-  آن را منتشر سازند. در کنار آن‌ها buildهای OracleJDK که شامل ویژگی‌‌‌‌‌های تجاری مانند Java Flight Recorder و Mission Control هستند، تحت لیسانس کد‌‌‌‌‌های باینری اوراکل منتشر خواهند شد. این مجوز مستلزم یک توافق click wrap است. طی این توافق‌نامه، کاربر باید مفاد مورد نظر شرکت عرضه‌کننده را به صورت آنلاین  بپذیرد. اوراکل پشتیبانی پولی از این buildها را برای مشتریانی که تمایل به ماندن طولانی‌مدت در یک نسخۀ دارای به‌روز‌رسانی‌‌‌‌‌های حیاتی هستند ارائه خواهد کرد.

بر اساس شکل فوق، OpenJDK‌‌‌ها یک جریان دائمی هستند و تقریبا هر سه سال یکی از آن‌ها در قالب OracleJDK برای شرکت‌‌‌‌‌های بزرگ نگهداری می‌شود.

بر اساس مدل جدید، رابطۀ اوراکل با OpenJDK نیز دستخوش تغییراتی می‌شود، این شرکت علاوه بر انتشار باینری‌‌‌‌‌های OpenJDK تحت GPL، ویژگی‌‌‌‌‌های تجاری OracleJDK را ‌‌متن‌باز خواهد کرد، این کار با هدف افزایش جذابیت OpenJDK برای توسعه‌گران و کاهش تفاوت‌‌‌‌‌های بین buildهای OpenJDK و OracleJDK انجام می‌شود. هدف نهایی اوراکل این است که buildهای OpenJDK و OracleJDK را آنقدر به هم نزدیک کند که بدون مشکل بتوان آن‌ها را به جای هم مورد استفاده قرار داد.

نگاهی دقیق‌تر به برنامۀ پشتیبانی

اوراکل سه نوع کلی از پشتیبانی را تعریف کرده است:

 شرح نام
 پشتیبانی عمومی  Premier (Publicly available) Support
 پشتیبانی تجاری ( تعیین بازه زمانی از طرف اوراکل؛ تقریبا سه سال)  Extended Support (commercial)
 پشتیبانی مادام‌العمر (تعیین بازه زمانی به انتخاب مشتری)  Sustaining Support

Feature Release هر شش ماه یکبار منتشر خواهند شد که برای ماه‌‌‌‌‌های مارس و سپتامبر برنامه‌ریزی شده‌اند. در این نسخه‌‌‌ها ویژگی‌‌‌‌‌های جدیدی که در نسخۀ LTS بعدی عرضه خواهند شد، منتشر می‌شود. پشتیبانی از این نسخه‌‌‌ها تنها در قالب به‌روز‌رسانی باینری‌‌‌‌‌های OpenJDK خواهد بود. به‌روز‌رسانی‌‌‌ها به صورت فصلی عرضه شده و حاوی bug fix‌‌‌‌‌های امنیتی و ارتقاهای معمول خواهند بود. ماه‌‌‌‌‌های ژانویه، آوریل، جولای و اکتبر به این منظور در نظر گرفته شده‌اند.

پشتیبانی از نسخه‌‌‌‌‌های غیر LTS تنها به مدت 6 ماه پس از دسترسی عمومی (GA: General Access) دوام خواهد داشت. پس از این تاریخ، پشتیبانی تنها از طریق قرارداد‌‌‌‌‌های تجاری پشتیبانی مادام‌العمر مقدور خواهد بود.

هر نسخۀ LTS سه سال پشتیبانی عمومی و سه سال پشتیبانی تجاری خواهد داشت. تداوم پشتیبانی پس از این بازۀ زمانی تنها در قالب قرارداد‌‌‌‌‌های تجاری با اوراکل میسر است.

پاسخ سوال

اما در ابتدای مقاله پرسشی مطرح کردیم، آیا با عرضۀ پی‌در‌پی نسخه‌‌‌‌‌های جاوا، پیگیری سیر پیشرفت آن مشکل‌تر خواهد شد؟ جواب کاملا منفی است. روال جدید، سرعت کلی تغییرات و توسعۀ زبان را تغییر‌‌ نمی‌دهد بلکه نوآوری در ساختار و انتشار ویژگی‌‌‌ها بلافاصله پس از تکمیل را میسر می‌کند. هر ویژگی جدید در زبان، پس از توسعۀ کامل و گرفتن بازخورد‌‌‌ها و رفع باگ‌‌‌‌‌های آن، به خط تولید LTS اضافه می‌شود. Feature Release‌‌‌ها کوچکتر از نسخه‌‌‌‌‌های قدیمی خواهند بود، در نتیجه پذیرش و به کار گیری آن‌ها نیز ساده‌تر است.

منابع

وبلاگ JavaPapers، شرح تفاوت OracleJDK و OpenJKD
سایت سیستم عامل اوبونتو
سایت فریم‌ورک Django
مقاله‌ای از سایت InfoWorld
مقاله‌ای از سایت ADTMag
سایت شرکت AZUL، ارائه دهنده پشتیبانی اینترپرایز از OpenJDK
سایت شرکت اوراکل (ویدئو)
سایت شرکت اوراکل (شرح)

[1]  Mark Reinhold, chief architect of Oracle’s Java Platform Group

نوشته های مشابه

‫3 دیدگاه ها

  1. سلام
    ما به همراه یک گروه از متخصصین حوزه وب
    گروه تلگرامی جامعه وبمستران ایران را
    لانچ کردیم.
    با توجه به اینکه شما هم در این زمینه فعال هستید
    خوشحال می شیم به ما بپیوندید
    تا تعاملات مفیدی باهم داشته
    باشیم
    لینک گروه خدمتتون
    https://t.me/joinchat/DBhKUBJE3gUMxzABig66Ig

  2. به نظرم پیچیده میاد .
    نظر دوستان چیه
    از طرفی هم java ee هم تغییر نام داده و به بنیاد ایکلیپس واگذار شده.
    این تغییرات چه جوری کنار هم قرار می گیرند؟

    1. مدیریت توسعه ی Java SE، Java ME و Java EE قبلا در سیستمJCP انجام می شد. یعنی کاربران JSR ها را پیشنهاد، بازبینی و تکمیل می کردند و کل کار تحت مدیریت و کنترل JCP بود.
      با واگذاری Java EE به Eclipse Foundation، پروژه ای به نام EE4J در اکلیپس ایجاد شد، مدیریت توسعه ی پروژه ی جدید توی EE4j PMC انجام می شه، در حالی که توسعه ی Java SE و ME هنوز در قالب JCP خواهد بود.
      به صورت خلاصه می تونیم بگیم برنامه زمان بندی انتشار این دو هم از هم جدا شده و وابستگی چندانی به هم ندارند.
      احتمالا در روزهای آینده در مورد اوضاع Jakarta EE نوشته ای منتشر خواهیم کرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا