جاوا، که به عنوان یک زبان برنامهنویسی با قدمت و تأثیر قابل توجه شناخته میشود، در دهه ۱۹۹۰ توسط شرکت سان مایکروسیستمز (Sun Microsystems) توسعه یافت. این زبان، اگرچه در زمان پیدایش خود ویژگیهای انقلابی جدیدی ارائه نکرد، اما به سرعت مورد استقبال قرار گرفت. جاوا با اقتباس از نحو (syntax) زبانهای برنامهنویسی C و ++C و ترکیب آن با مفهوم ماشین مجازی (virtual machine) – که در آن زمان نمونههای آن در ماشینهای یوسیاسدی پی (UCSD P machines) دیده میشد – پایههای خود را بنا نهاد.
پیدایش و اهداف اولیه
پروژه اولیه جاوا در سان مایکروسیستمز با هدف توسعه یک جایگزین بهتر برای ++C آغاز شد. هدف اصلی، برنامهنویسی برای دستگاههایی بود که امروزه آنها را با عنوان اینترنت اشیا (IoT) میشناسیم. تیم توسعه، به سرپرستی جیمز گاسلینگ (James Gosling) که معمولاً به عنوان مخترع جاوا شناخته میشود و دارای مدرک دکترا در علوم کامپیوتر از دانشگاه کارنگی ملون (Carnegie Mellon) است، ++C را به دلیل مشکلاتی از قبیل مستعد خطا بودن، عدم وجود جمعآوری زباله (garbage collection) و مصرف بالای حافظه رد کرد.
نام اولیه این زبان اوک (Oak) بود که از درخت بلوط بیرون دفتر گاسلینگ الهام گرفته شده بود. در ابتدا این زبان چندان مورد توجه قرار نگرفت، اما با ظهور وب جهانگستر (World Wide Web)، پتانسیل آن برای توسعه صفحات وب شناسایی شد. به دنبال یک چالش قانونی از سوی شرکت اوک تکنولوژی (Oak Technology)، نام زبان به جاوا تغییر یافت و از آن برای پیادهسازی یک مرورگر وب به نام هاتجاوا (HotJava) استفاده شد. انتشار عمومی جاوا ۱.۰اِی۲ (Java 1.0a2) در تاریخ ۲۳ می ۱۹۹۵ در کنفرانس سانورلد (SunWorld) صورت گرفت و همزمان با آن، نتاسکیپ (Netscape) اعلام کرد که مرورگرهایش از جاوا پشتیبانی خواهند کرد. جالب است بدانید که در همین زمان، برندان آیش (Brendan Eich) زبانی به نام موکا (Mocha) را برای اجرا در مرورگر توسعه داد که بعدها به جاوااسکریپت (JavaScript) تغییر نام داد، اگرچه هیچ ارتباطی با جاوا ندارد.
جاوا در مرورگر و فراتر از آن
جاوا از طریق اپلتها (Applets) وارد مرورگرها شد و این امکان را به برنامهنویسان داد تا گرافیک و بازیهایی را در صفحات وب ایجاد کنند. برای مدتی، جاوا تنها راه برای انجام کارهای چشمگیر در یک صفحه وب بود. با این حال، امروزه پلاگینهایی مانند اپلتها منسوخ شدهاند و جاوا در سمت مرورگر (browser-side Java) تقریباً از بین رفته است.
در خارج از مرورگر، جاوا عمدتاً به دلیل عدم توانایی در تثبیت یک چارچوب رابط کاربری گرافیکی (GUI framework) موفق، نتوانست به طور گستردهای پذیرفته شود. ابتدا اِیدبلیوتی (AWT) معرفی شد که ظاهر مناسبی نداشت. سپس سوینگ (Swing) جایگزین آن شد که پیشرفت قابل توجهی بود و بعد از آن جاوا افاکس (JavaFX) عرضه شد که کمتر مورد استفاده قرار گرفت. این عدم ثبات همچنان یک چالش برای توسعهدهندگان دسکتاپ جاوا است.
با این حال، علاقه به جاوا در سمت کلاینت (client-side) باعث گسترش آن به سمت سرور (server-side) و کاربردهای تجاری شد. در آن زمان، جاوا تنها زبان شیءگرا (object-oriented) محبوبی بود که به اندازه کافی برای انجام کارهای سنگین، "جدی" به نظر میرسید. به لطف استفاده از یک ماشین مجازی به نام ماشین مجازی جاوا (Java Virtual Machine) یا جیویام (JVM)، انتقال آن به محیطهای دیگر آسان بود. جاوا اولین زبانی نبود که وعده یک بار بنویس، همه جا اجرا کن (Write Once Run Anywhere - WORA) را میداد، اما اولین زبانی بود که به نظر میرسید توانایی انجام این کار را به صورت پایدار دارد، اگرچه در ابتدا کند بود و محیطهای توسعه آن نیز کند عمل میکردند.
با وجود کاستیهای فنی، جاوا به عنوان یک انتخاب مطمئن برای شرکتها مطرح شد. این امر تا حدی به دلیل حمایت سان و تا حدی به دلیل ماهیت متنباز (open source) و در نتیجه آیندهنگر بودن آن بود. سان مایکروسیستمز، با وجود اینکه یک شرکت سختافزاری بود، تلاش زیادی برای بازاریابی جاوا انجام داد.
ورود جاوا به سمت سرور و کسبوکار
حرکت جاوا به سمت سرور با جی۲اییای (J2EE) یا اِدیشن سازمانی (Enterprise Edition) آغاز شد. این نسخه، مفهوم سرور کاربردی (application server) را معرفی کرد – یک وبسرور که امکان ایجاد بخش سمت سرور یک برنامه کلاینت-سرور را فراهم میآورد. با استفاده از فناوریهایی مانند صفحات سرور جاوا (JavaServer Pages - JSP)، سروْلتها (Servlets) و جاوابینهای سازمانی (Enterprise JavaBeans - EJB)، امکان ساخت منطق سمت سرور برای رسیدگی به درخواستهای کلاینت فراهم شد. سرورهای کاربردی جاوا مانند تامکت (Tomcat)، جتی (Jetty)، جیباس (JBoss)، جرونیمو (Geronimo) و گلسفیش (GlassFish) برای میزبانی برنامههای جاوا ایای (Java EE) ایجاد شدند.
تا سال ۱۹۹۹، جاوا با امکانات سمت سرور پیشرفته خود، پیشرو در بازار بود. در همان زمان، مایکروسافت تنها اِیاسپی کلاسیک (classic ASP) را داشت که شبیه به JSP بود. برای ارائه پاسخی کامل به J2EE، مایکروسافت مجبور بود تا سال ۲۰۰۲ و معرفی داتنت اِیاسپی (.NET ASP) منتظر بماند.
سرانجام، جاوا تأیید شرکتهایی مانند آیبیام (IBM) را نیز به دست آورد. این شرکتها نه به دلیل برتری یا انقلابی بودن جاوا، بلکه به دلیل عدم وجود جایگزین بهتر، از آن استقبال کردند. سیشارپ (#C) مایکروسافت تا سال ۲۰۰۲ ظاهر نشد و در آن زمان، یک زبان اختصاصی (proprietary) بود. دیگر زبان مایکروسافت، ویژوال بیسیک (Visual Basic)، اگرچه خوب بود، اما وجهه یک زبان "اسباببازی" برای آماتورها را داشت و کاملاً شیءگرا نبود. ++C شیءگرا بود، اما به عنوان یک زبان دشوار برای کارهای فنی شناخته میشد. جالب است که پایتون (Python) نیز در آن زمان وجود داشت، اما یک زبان اقلیت بود و تا سال ۲۰۰۰ شروع به جلب حمایت نکرد. حتی امروزه نیز پایتون بیشتر به عنوان زبانی برای علاقهمندان، مناسب برای علم و آمار، و نه برای نرمافزارهای تجاری جدی تلقی میشود. بنابراین، جاوا بهترین انتخاب برای کاربردهای تجاری بود.
ویژگیهای جاوا و مقایسه با سایر زبانها
جاوا با دیدن اشتباهات ++C، از مزیتهایی بهرهمند شد. نحو و رویکرد آن به دادهها بسیار سادهتر و منظمتر بود. در جاوا، هر چیزی یک شیء (object) است و نیازی به استفاده از رویکردهای سطح پایینتر برای انجام کارها وجود ندارد. با این حال، فلسفه "همه چیز یک شیء است" در جاوا مانع از آن شد که توابع (functions) نیز به عنوان شیء در نظر گرفته شوند – و هنوز هم این مشکل پابرجاست. این امر، انتقال توابع را دشوار میکند؛ باید یک شیء را که تابع مورد نظر را به عنوان یک متد (method) دارد، ارسال کنید.
یکی دیگر از ویژگیهای جاوا، پرگویی (verbosity) آن است. نمیتوان کد مختصر و مفیدی در جاوا نوشت و در آن تکرار و کدهای از پیشنوشتهشده (boilerplate code) زیادی وجود دارد. برای درک این موضوع، کافی است هر کد جاوا را با معادل کاتلین (Kotlin) آن مقایسه کنید؛ همین امر کاتلین را به یک جایگزین جذاب تبدیل کرده است.
با این همه، جاوا زبانی است که میتوان با آن زندگی کرد و از آن راضی بود. به حدی که یک برنامهنویس با سابقه جاوا اغلب نمیتواند ببیند که راه بهتری برای انجام کارها وجود دارد. حتی پس از ۳۰ سال، جاوا همچنان رقیب قابل قبولی در حوزه بانکداری و مالی ندارد که این یک دستاورد شگفتانگیز است. در حوزههای دیگر، پایتون اخیراً بخشی از قلمرو جاوا را به خود اختصاص داده و به عنوان یک زبان عمومی و پرکاربردترین زبان در آموزش، از آن پیشی گرفته است.
از زمان راهاندازی جاوا، زبانهای بسیاری برای اجرا بر روی جیویام (JVM) توسعه یافتهاند – از جمله کلوژر (Clojure)، گروی (Groovy)، اسکالا (Scala) و کاتلین – اما هیچکدام نتوانستهاند جاوا را از جایگاه خود برکنار کنند.
تأثیر اوراکل و اندروید
در سال ۲۰۱۰، شرکت اوراکل (Oracle) که به درآمدزایی تهاجمی شهرت دارد، با خرید سان مایکروسیستمز، کنترل جاوا را به دست گرفت. این امر نگرانیهایی را در مورد به خطر افتادن جاوا برای کسب درآمد توسط اوراکل ایجاد کرد. این نگرانیها تا حدی توجیه شدند. اکنون دو نسخه از جاوا وجود دارد: اوپنجیدیکی (OpenJDK) که یک نسخه رایگان است و میتوان بدون مجوز تجاری (commercial license) از آن برای هر هدفی استفاده کرد، و اوراکل جیدیکی (Oracle JDK) که میتوان برای آزمایش و توسعه بدون مجوز تجاری از آن استفاده کرد، اما در صورت استفاده در محیط عملیاتی (production)، نیاز به مجوز پولی دارد.
شاید بزرگترین پیامد کنترل جاوا توسط اوراکل، تأثیر آن بر اندروید (Android) بود. پروژه اندروید جاوا را به عنوان زبان برنامهنویسی اصلی خود برای برنامههای بومی (native apps) پذیرفت و این امر باید یکی از بزرگترین محرکها برای محبوبیت این زبان و تضمین ارتباط آن در دنیای تلفن همراه میشد. با این حال، این مزیت تحت الشعاع یک اختلاف حقوقی طولانی قرار گرفت که در آن اوراکل، گوگل را به دلیل نقض حق کپیرایت (copyright infringement) در استفاده از اِیپیآیهای (APIs) جاوا در اندروید، مورد شکایت قرار داد. پس از بیش از یک دهه دعوای حقوقی که با رأی دادگاه عالی ایالات متحده (U.S. Supreme Court) در آوریل ۲۰۲۱ به اوج خود رسید، دادگاه نهایتاً با رأی ۶-۲ به نفع گوگل حکم داد و استفاده گوگل از APIهای جاوا را استفاده منصفانه (fair use) تلقی کرد.
پیامدهای نزاع حقوقی و صعود کاتلین
گرچه گوگل سرانجام در این نزاع حقوقی پیروز شد، اما عدم قطعیت طولانیمدت در مورد نتیجه آن باعث شد تا گوگل به سمت پذیرش کاتلین (Kotlin) به عنوان زبان ترجیحی برای اندروید روی آورد. کاتلین یک زبان برنامهنویسی برای جیویام (JVM) است که از سال ۲۰۱۰ توسط جتبرینز (JetBrains) پیشگام شد و در سال ۲۰۱۲ به صورت متنباز (open-sourced) منتشر گردید.
خیزش اوپنجیدیکی (OpenJDK)
در حالی که اوراکل در سال ۲۰۲۰، ۷۵ درصد از سهم بازار توزیع جیدیکی (JDK) را در اختیار داشت، این رقم تا سال ۲۰۲۳ به ۴۲ درصد و در سال بعد به ۲۱ درصد کاهش یافت. یکی از دلایل اصلی این کاهش، تغییراتی بود که اوراکل در مدل صدور مجوز (licensing model) برای جاوا اسای (Java SE – Standard Edition) اعمال کرد، به ویژه تغییر به مدل "به ازای هر کارمند" (per-employee) در سال ۲۰۲۳، که بسیاری از کسبوکارها آن را به طور قابل توجهی گرانتر یافتند.
همزمان با این تغییرات، تمایل شدیدی به سمت توزیعهای اوپنجیدیکی (OpenJDK) که متنباز و رایگان هستند، ایجاد شد. پشتیبانی تجاری (commercial support) برای ساختارهای (builds) اوپنجیدیکی توسط فروشندگانی از جمله آزول (Azul)، آمازون کورِتو (Amazon (Corretto)) و اکلیپس آداپتیوم تمورین (Eclipse Adoptium (Temurin)) ارائه میشود.
یکی دیگر از اثرات مفید اوپنجیدیکی، افزایش فرکانس انتشار نسخههای جدید بوده است. در حالی که پیش از اوپنجیدیکی، نسخههای جدید تنها زمانی منتشر میشدند که مجموعه بزرگی از ویژگیها تکمیل میشدند. این امر منجر به فواصل نامنظم و اغلب چند ساله بین نسخههای اصلی میشد (به عنوان مثال، جاوا ۶ تا ۷ پنج سال طول کشید، جاوا ۷ تا ۸ سه سال). اما از زمان جاوا ۹ در سال ۲۰۱۷، به لطف جامعه متنباز، یک چرخه انتشار ششماهه برقرار شده است. هنگامی که اوپنجیدیکی یک نسخه جدید هر شش ماه یک بار تولید میکند، اوراکل نیز با انتشار نسخههای جیدیکی برند شده و با پشتیبانی تجاری خود، از آن پیروی میکند.