ویژه

بررسی توزیع های OpenJDK

از آن جا که OpenJDK یک پروژه متن باز است توزیع های متعددی از آن وجود دارد که شرکت های مختلف بنا به سیاست های خود اقدام به عرضه آن ها نموده اند. شرکت Oracle هم در کنار JDK تحت لایسنس غیر آزاد خود همواره نسخه ای از OpenJDK را عرضه می کند. سال گذشته شرکت Oracle تغییراتی را در شیوه انتشار OpenJDK و لایسنس Oracle JDK انجام داد. بدین شکل که:

۱) نسخه جدیدی از OpenJDK به عنوان مرجع اصلی پروژه JDK، هر شش ماه یک بار منتشر خواهد شد.

۲) نسخه های با پشتیبانی بلند مدت تنها برای Oracle JDK عرضه خواهد شد که نیازمند داشتن اشتراک است.

۳)‌ استفاده از Oracle JDK به صورت رایگان، برای مصارفی غیر از توسعه مجاز نیست.

۴) نسخه های OpenJDK پس از گذشت شش ماه منقضی شده و هیچ به روز رسانی ای دریافت نمی کنند.

در نتیجه از این به بعد اوراکل هیچ گزینه آزاد و رایگانی برای استفاده از جاوا در Production به صورت بلند مدت، عرضه نخواهد کرد.

اینجاست که سایر توزیع های OpenJDK به کمک توسعه دهندگان جاوا در دنیای آزاد می آیند. در ادامه چند مورد از آن ها را معرفی می کنیم:

۱) Red Hat OpenJDK: شرکت Red Hat یکی از راهبران پروژه OpenJDKست و اخیرا هدایت پروژه OpenJDK 8 و 11 را بر عهده گرفته است. این شرکت نسخه هایش را هم برای توزیع های لینوکس خود و هم ویندوز منتشر می کند. برای نصب در یکی از توزیع های RHEL، CentOS یا Fedora کافی است از طریق مدیر بسته yum یا dnf آن را نصب کنید:

yum install java-11-openjdk

۲) توزیع های لینوکس: در توزیع های لینوکس به واسطه وجود سیستم مدیریت بسته (Package Manager) بسیاری از ابزارها به صورت رسمی بسته بندی و ارائه می شوند. OpenJDK هم از این قاعده مستثنی نیست و به صورت بسته وجود دارد و بنابراین در هر توزیع لینوکسی به راحتی قابل نصب و بروزرسانی است.

۳) AdoptOpenJDK: تلاشی است برای انتشار OpenJDK به صورت کاملا آزاد و فارغ از محدودیت هایی که انتشار تحت نام شرکت ها ایجاد می کند. AdoptOpenJDK نسخه های گوناگونی عرضه می کند. از جمله آن ها می توان به نسخه ای با ماشین مجازی Openj9 اشاره کرد که باعث تغییر چشمگیری در مصرف حافظه هنگام اجرای برنامه ها می شود.

۴) Zulu: شرکت Azul که توسط گروهی از کارکنان سابق شرکت Sun اداره می شود سالیان زیادی است که OpenJDK را به صورت رایگان و اشتراکی عرضه و پشتیبانی امنیتی می کند. پس از جدا شدن OpenJFX از OpenJDK این شرکت هنوز نسخه ای ارائه می کند که شامل OpenJFXست.

۵) Amazon Corretto: توزیع شرکت آمازون با نام Corretto است که نسخه های با پشتیبانی بلند مدت OpenJDK را به رایگان در اختیار عموم قرار می دهد.

۶) IBM Java SDK: این شرکت که ید طولایی در توسعه OpenJDK دارد نسخه های خود را با نام Java SDK عرضه می کند.

۷) JetBrains Runtime: ناشر IDEهای معروف این نسخه را که دارای اصلاحاتی است، برای استفاده در محصولات خود عرضه و توصیه می کند.

راهنمای شروع کار با Spring Boot

مطالب زیادی در وب فارسی در مورد Spring Boot یافت می شوند ولی کمتر به نحوه استارت زدن یک پروژه به خصوص برای افراد مبتدی پرداخته شده است. در این مطلب به نحوه شروع کار و ساختن یک پروژه Spring Boot با Spring Initializer می پردازیم.

Spring فریمورکی غنی در دنیای جاواست که در زمینه های زیادی زیادی مانند Web، Security، Rest، JPA گسترش پیدا کرده است. Spring Boot فریمورکی بر فریمورک Spring است که با خودکار کردن پیکربندی ها و حذف پیکربندی با فایل های xml، استفاده از Spring را بسیار ساده تر کرده است. به طوری که شما می توانید با نوشتن چند کلاس جاوا و بدون نیاز با سر و کله زدن با web.xml یک برنامه وب تمام عیار راه بیندازید!

توسعه دهندگان Spring سرویسی به نام Spring Initializer را برای ساختن پروژه های Springی ارائه کرده اند. برای شروع کافی است به آدرس https://start.spring.io رفته و پس از انتخاب نام پروژه و وابستگی های مورد نیاز، نسخه اولیه پروژه خود را دانلود کنید.

معمولا نیازی به تغییر مقادیر پیش فرض نیست و تنها وابستگی ها و نام ها نیاز به تغییر دارند. اولین انتخاب بین Build Systemهای Maven و Gradle است. سپس از بین زبان های جاوا،‌کاتلین و Groovy یکی باید انتخاب شوند. نسخه Spring Boot که بهترین انتخاب آخرین نسخه سری ۲ است. گروه و Artifact که نام گروه و پروژه شما در Maven هستند. اگر روی گزینه More Options کلیک کنید انتخاب های بیشتری از جمله برای شیوه بسته بندی پروژه و نسخه جاوا خواهید داشت. مهمترین قسمت انتخاب وابستگی هاست. به طور مثال برای یه برنامه وب ساده اینها حداقل انتخاب ها هستند: Web، Thymeleaf، Security و JPA

پس از پایان روی دکمه Generate کلیک کنید. فایل زیپی دانلود می شود که حاوی پروژه شماست. آن را استخراج کنید.

برای کار روی پروژه به یک IDE مانند Idea، NetBeans یا Eclipse دارید. ماIntellij Idea Community را توصیه می کنیم. پس از باز کردن Idea، گزینه Open را انتخاب و پوشه اصلی پروژه خود را به آن بدهید. فرایند Index کردن و دانلود وابستگی های پروژه ممکن است چند دقیقه طول بکشد. پس از می توانید روی پروژه کار کنید.

با Firejail در مقابل آسیب پذیری های برنامه ها در لینوکس محفوظ تر بمانید!

در سیستم های مبتنی بر لینوکس دسترسی های حداقلی برای محافظت از منابع روی Filesystem تعریف شده اند. مانند «صاحب» یا «گروه» فایل و یا نوع دسترسی صاحب به فایل که مثلا می تواند «فقط خواندنی» باشد.

ولی در بعضی شرایط این سطح دسترسی ها کافی نیستند. مثلا اگر توجه کرده باشید برنامه هایی که روی لینوکس دسکتاپ خود باز می کنید به همه فایل های درون مسیر Home شما دسترسی دارند. مثلا فایرفاکس می تواند کلیدهای SSH شما را در مسیر ‎~/.ssh ببیند! حالا تصور کنید که اگر رخنه ای در فایرفاکس وجود داشته باشد که مهاجم بتواند به فایل های شما دسترسی پیدا کند کلیدهای SSH شما لو خواهد رفت! بنابراین نیاز به تعریف سطح دیگری از دسترسی احساس می شود که به هر برنامه، تنها اجازه دسترسی به منابعی را که نیاز دارد بدهد. در پاسخ به این نیاز SELinux و AppArmor به وجود آمده اند ولی پیچیدگیشان، مانعی برای استفاده از آن ها به خصوص در نرم افزارهای دسکتاپ است.

در عوض برنامه های سبک تری مانند Firejail هم وجود دارند که بدون نیاز به زدن کانفیگ های پیچیده می توانند تا حد بسیار خوبی از فایل های ما محافظت کنند. Firejail یک برنامه سبک به زبان C است که با استفاده از امکانات موجود در هسته لینوکس می تواند محیط اجرای برنامه را محدود کند. به صورتی که هر برنامه دید محدود و مخصوص خودش را از منابع سیستم مانند File system یا mount table داشته باشد. استفاده از Firejail به سادگی زدن یک دستور است. مثلا برای اجرای فایرفاکس:

$ firejail firefox

فایرفاکس با همان تنظیمات همیشگی شما اجرا خواهد شد. تفاوتی که وجود دارد بسیاری از مسیرها و منابع سیستم به صورت جعلی به فایرفاکس ارائه شده اند. اگر سعی کنید فایلی را ذخیره کنید متوجه می شوید که به جز پوشه Downloads و چند پوشه مخفی دیگر هیچ فایلی از خانه شما برای فایرفاکس قابل دیدن نیست! این محیطی است که Firejail به وجود آورده است و تنها پوشه Downloads آن واقعی است. پس اگر قصد ذخیره فایلی را دارید آن را حتما در این پوشه قرار دهید.

اساس کار Firejail پروفایلهایی هستند که در مسیر ‎/etc/firejail قرار دارند. برای برنامه های گوناگون، پروفایلی وجود دارد. شما هم اگر بخواهید می توانید برای برنامه خودتان پروفایلی نوشته یا پروفایل های موجود را ویرایش کنید. برای اطلاعات بیشتر می توانید به ویکی Firejail مراجعه کنید.

Maven Wrapper چیست؟

Maven Wrapper یا mvnw این امکان را به شما می دهد تا بدون نصب Maven از آن استفاده کنید. این ابزار در صورتی که Maven نصب نباشد آن را دانلود و اجرا می کند. این شیوه با نصب به وسیله مدیر بسته لینوکس تفاوت دارد از آن جهت که Maven به صورت system-wide نصب نمی شود. طبق راهنمای صفحه GitHub این ابزار برای افزودن آن به پروژه خود کافی است دستور زیر را در مسیر آن اجرا کنید:

mvn -N io.takari:maven:wrapper

پس از آن به جای دستور mvn در لینوکس می توانید از

./mvnw

و در ویندوز از

mvnw.cmd

استفاده کنید. یکی از جاهایی که این ابزار اهمیت خود را نشان می دهد در containerهای Docker است که فاقد ابزار Maven هستند. در چنین شرایطی شما می توانید بدون نیاز به نصب Maven و یا شخصی سازی imageها از Maven بهره ببرید.