● معرفی برنامه WINE
پروژه Wine در سال ۱۹۹۳ شروع شد و به‌عنوان راه مناسبی برای اجرای برنامه‌های ویندوز ۳.۱ در لینوکس شناخته شد. در آن زمان bob Amstadt هماهنگ کننده اصلی آن بود، ولی خیلی زود این وظیفه به الکساندر جولیارد محصول شد، که تا به امروزرا به عهده دارد. در طول سال‌های قابلیت‌های زیادی از جمله پشتیبانی از Wine۳۲ به سیستم‌های یونیکس افزوده شده است.
با وجود این که Wine هنوز در حال توسعه است و در حال حاضر برای کاربردهای عمومی خیلی هم مناسب نیست. خیلی از کاربران این برنامه را مفید می‌دانند.
● تاریخچه Wine
همان‌طور که گفته شد ریشه Wine به سال ۱۹۹۳ می‌رسد. در آن زمان چند وجه تمایز باعث شده بود تا برنامه‌های ویندوز جذاب‌تر شوند و مایکرو سافت با موفقیت دوچندانی برنامه‌های کامپیوتری شخصی را رهبری می‌کرد. آی‌بی‌ام هم امیدوار بود OS/۲ سهمی از بازار را به دست آورد. اما آن‌ها نیز پذیرفته بودند که پشتیبانی از برنامه‌های ویندوز لازم است و به همین خاطر این توانائی را در محصول خود قرار دادند. برنامه‌های رایگان دهه هشتاد رشد زیادی را تجربه کردند، چرا که کاربران پی بردند که این امکان وجود دارد تا از یک سیستم عامل چند کاربره و چند کاره به‌صورت رایکان استفاده کنند.
حق مالکیت شرکت sun در استفاده از تکنولوژی Praxsys در سپتامبر ۱۹۹۲ به تولید محصولی به‌نام Wabi منجر شد. سان برای نخستین بار این برنامه رادر کنفرانس توسعه سلاریس، در سال ۱۹۹۳ ارایه کرد. این برنامه را به کاربران Solaris X۸۶ و Solaris۲.۲ امکان می‌داد تا برنامه‌های ویندوز را اجرا کنند. در آن زمان برنامه‌های دیگری هم بودند که اجازه می‌دادند برنامه‌های ویندوز اجرا شوند، تا داس و ویندوز روی آن‌ها نصب شوند.
Wabi در آن زمان تنها برنامه‌ای بود که اجازه می‌داد فراخوان پنجره‌های ویندوز به‌صورت مستقیم در فراخوان‌های XWindows ترجمه شود. با شبیه‌سازی بقیه کدهای X۸۶ این امکان نیز به وجود آمد تا برنامه‌های ویندوز، به‌طور واقعی و با سرعت بیشتری روی یک ایستگاه RISC اجرا شوند. از دیگر ویژگی‌های پیشرفته Wabi اضافه شدن تکنولوژی فونت‌های Bit Stream بود که باعث ارجای فونت‌هایTrue Type می‌شد.
کاربران سیستم لینوکس در ژوئن سال ۱۹۹۳ برای ایجاد امکان مشابهی دست به کار شدند. در آن زمان Wabi به درون لینوکس آورده شد و نام Wine توسط چند تن از توسعه‌دهندگان اولیه انتخاب شد.
نخستین کار درست کردن یک برنامه Loader (فراخوان) بود که می‌توانست کدهای شانزده بیتی باینری ویندوز را اجرا کند. مدیریت این کار به عهده باب الکساندر بود و برنامه با سرعتی اجرا شد که در مدت شش ماه اجرای برنامه Soliturire ممکن شد. در نوامبر ۱۹۹۳ Wine به سکوی دیگری برده شد. Berzak با افزودن یک سری وصله، امکان اجرای Wine را روی NetBSD فراهم کرد. درآن زمان باب تخمین زده بود که با این سرعت توسعه، نخستین نسخه در مدت شش ماه آماده خواهد شد، ولی آماده‌سازی نخستین نسخه به مدت یک سال به طول انجامید.
برای برنامه Wine بیش از ۲/۱ میلیون خط کد به زبان C در طول دهه گذشته نوشته شده و نزدیک به ششصد نفر در توسعه آن نقش داشته‌اند.
● مزایای استفاده از Wine
Wine این امکان را به‌وجود می‌آورد تا از همه نقاط قوت یونیکس (پایداری، انعطاف‌پذیری، مدیریت از راه دور) و برنامه‌های ویندوز با هم استفاده کنید.
یونیکس همیشه امکان نوشتن اسکرپیت‌های پرقدرت را فراهم می‌کند. Wine نیز امکان فراخوانی برنامه‌های ویندوز را به کمک اسکریپت‌ها در محیط یونیکس فراهم می‌کند، هم‌چنین می‌توانید آن را روی یک سرورلینوکس نصب کنید و به کمک ترمینال X به برنامه‌های ویندوز دسترسی پیدا کنید
با بهره‌گیری از Wine می‌توان برنامه‌ها را در وب نیز استفاده کرد که این کار با استفاده از VNC و Javac client انجام می‌شود.
درباره Wine بحث‌های زیادی صورت گرفته که برخی از آن‌ها به‌طور کامل و بعضی هم تا حدودی نادرست هستند که در ادامه به بررسی آن‌ها می‌پردازیم.
▪ مورد اول
یکی از ادعاها درباره Wine این است که چون این برنامه یک برنامه Emulator (مقلد) است، بنابراین سرعت کمی دارد.
بعضی‌ها فکر می‌کنند Wine باید هر دستورالعمل پردازنده برنامه‌های ویندوز را تقلید کند که این مطلب نادرست است. همان‌طور که از نام Wine پیدا است (Wine is not an Emulator) این برنامه یک تقلیدکننده نیست و پروسه‌های intel X۸۶ را تقلید نمی‌کند. بنابراین سرعت اجرای آن مثل برنامه Wabi نیست. توضیح دیگر این که آن برنامه روی پردازنده intelX۸۶ نمی‌شود و باید پروسه‌ها را تقلید کند. البته برنامه‌های ویندوز که از فراخوان‌های سیتسم استفاده نمی‌کنند. سرعت اجرای بالائی دارند.
برخی می‌گویند که چون Wine یکلایه اضافی بالای سیستم قرار می‌دهد، بنابراین اجرای برنامه‌های ویندوز کندتر انجام خواهد شد. این مسئله در تئوری درست است. برنامه‌های ویندوزی که در Wine اجرا می‌شوند یا توسط Winelib دوباره کامپایل می‌شوند نسبت به برنامه‌های لینوکس کارکرد کندتری دارند، اما این فقط در تئوری درست است و در عمل خواهید دید که اگر یک برنامه ویندوز خوب نوشته شده باشد، می‌تواند برنامه‌ای را که در لینوکس بد نوشته شده را در هر زمانی شکست دهد. در واقع کارآمدی الگوریتیم به کار رفته در هر برنامه تأثیری بیشتری روی عملکرد اجرای آن، نسبت به خود برنامه Wine دارد. برای همین، بیشتر افراد از ترکیب Wine و لینوکس برای کارآئی بیشتر استفاده می‌کنند.
در حقیقت عملکرد و سرعت بالا اولویت بالائی ندارد. چیزی که در حال حاضر مهم است اجرای تعداد بیشتر از برنامه‌های ویندوز در Wine است.
▪ مورد دوم
مطلب دیگری که درباره Wine گفته می‌شود این است که Wine برای لینوکس خوب نیست.
یک حقیقت غیر قابل انکار درباره ویندوز این است که کتابخانه بزرگی از نرم‌افزار دارد که با این سیستم عامل کار می‌کنند. خیلی از این برنامه‌ها معادل لینوکسی هم دارند، ولی کاربران به‌خاطر بسیاری از برنامه‌های دیگر نمی‌توانند دست از ویندوز بردارند.
▪ مورد سوم
بعضی‌ها می‌گویند، شبیه‌سازهائی مثل (نر‌افزارهائی که کامپیوتر مجازی درست می‌کنند) بهتر هستند. به‌طور قطع این برنامه‌ها بهتر هستند، ولی باید نسخه کاملی از یک سیستم عامل را تحت یک ماشین مجازی اجرا کنید. در ضمن فراموش نکنید کارآئی سیستم هم کاهش می‌یابد، چرا که در این صورت گوئی شما یک سیستم عامل را روی سیستم عامل دیگری اجرا می‌کنید. به هر حال در بعضی موارد به کارگیری این نوع برنامه‌ها هم مفید است. برای مثال برنامه‌نویسان می‌توانند برای اجرا و آزمایش برنامه‌ها بدون راه‌اندازی دوباره سیستم از آن استفاده کنند، ولی به کارگیری چنین برنامه‌ای برای اجرای برنامه‌هائی هم‌چون Word راه‌حل جالبی نیست.
▪ مورد چهارم
شما به هر حال ویندوز را نیاز دارید.ولی نه! هدف Wine اجرای APIهای ویندوز است، به‌طوری که دیگر مجبور به استفاده از ویندوز نباشید. در حال حاضر شما می‌توانید تعداد زیادی از برنامه‌ها را بدون نصب ویندوز اجرا کنید، ولی چیزی‌ را که باید در نظر بگیرید این است که برنامه Wine هنوز کامل نشده و برای بعضی کارها به ویندوز نیاز خواهید داشت.
▪ مورد پنجم
Wine بد است، WinLib بهتر است!
به‌نظر می‌رسد که این مورد خیلی مورد توجه کاربران است. بعضی از افراد فکر می‌کنند که اجرای عادی برنامه‌های ویندوز با Wine زیاد قابل اطمینان نیست و کارآئی پائین‌تری نسبت به دوباره کامپایل کردن همان برنامه در WinLib دارد. برای این مورد دلیلی وجود ندارد. چون من هیچ تفاوتی در عملکر برنامه‌هائی که در Wine و WinLib آزمایش کردم، ندیدم.
▪ مورد ششم
Wine همیشه دنبال روی ویندوز است و شاید در اجرای برنامه‌های جدید، موفق نباشد.
پاسخ این است که ساختار Wine به گونه‌ای است که به راحتی اجازه می‌دهد APIهای جدید به آن اضافه شوند. توسعه‌دهندگان، توابع مورد نیاز را با سرعت زیادی به Wine اضافه می‌کنند. حتی برنامه‌های جدید، در نهایت پس از چند ماه قابلیت استفاده در Wine را پیدا می‌کنند. به‌علاوه اگر نسخه‌های ساخته شده درست کار نکنند، Wine برای رفع مشکل از Dllهای موجود پشتیبانی می‌کند. در خیلی از موارد این امکان وجود دارد که از Dllهای موجود برای به‌دست آوردن نیازهای برنامه‌ها استفاده کنید.
▪ مورد هفتم
چون Wine فقط درصد کمی از APIهای ویندوز، را اجرا می‌کند بنابراین توان اجرای برنامه‌های کم‌تری را دارد.
APIها مثل یک کتابخانه هستند. پس داشتن تعداد زیادی کتاب در قفسه‌ها همیشه خوب است، اما در حقیقت فقط چند کتاب به‌عنوان مرجع به کار می‌آیند و بیشترین مراجعه را دارند.
بیشتر برنامه‌ها وجه مشترک زیادی با هم دارند تا بتوانند کاربران بیشتری را جذب کنند. Wine از نود درصد فراخوان‌های عمومی ویندوز پشتیبانی می‌کند. این برنامه هنوز هم APIهای Wine۳۲ را اضاف می‌کند، ولی بیشتر کار در حال حاضر روی ترمیم تابع‌های موجود و تغییرات ساختاری Wine متمرکز است.
▪ مورد هشتم
Wine فقط برای ویندوز ۳.۱ کاربرد دارد و هرگز Win۶۴ را پشتیبانی نخواهد کرد. Wine زمانی شروع به کار کرد که هنوز ویندوز ۹۵ به‌وجود نیامده بود. البته ویندوز NT (و بنابراین APIهای ویندور ۲۳) در آن زمان وجود داشت، ولی Wine فقط از ویندوز ۱/۳ پشتیبانی می‌کرد، چون در آن زمان به آن صورت کسی از ویندوز NT استفاده نمی‌کرد. ولی دیگر آن روزها گذشته است. شاید پشتیبانی از ویندوز ۱/۳ نسبت به APIهای ویندوز ۳۲ کامل‌تر باشد، اما این روزها بیشتر توسعه‌ها برای APIهای ویندوز ۳۲ اتفاق می‌افتد.
در ضمن لازم است که در اینجا به دو نکته اشاره کنیم: نخست این که به‌نظر می‌رسد بیشتر کاربران از این شکایت می‌کنند که Wine فقط از ویندوز ۱/۳ پشتیبانی می‌کند. در حالی که نمی‌دانند که Wine از APIهای داس هم پشتیبانی می‌کند، چرا که تعداد زیادی از برنامه‌های ویندوز ۱/۳ و حتی ۹X هنوز برای وقفه‌ها از فراخوان‌های داس استفاده می‌کنند! دوم این‌که این WineLib است که فقط از APIهای ویندوز ۳۲ پشتیبانی می‌کند. header فایل در Win۱۶ (برای کامپایل برنامه‌های Win۱۶ لازم است) برای راحت‌تر شدن برنامه کنار گذاشته شده است. بنابراین به نوعی پشتیبانی از APIهای ویندوز ۳۲ نسبت به ویندوز ۱۶ بهتر انجام می‌شود. در حال حاضر Wine از APIهای ویندوز ۶۴ پشتیبانی نمی‌کند، اما تیم توسعه Wine وقتی تصمیم به تغییر ساختاربرنامه بگیرد از ویندوز ۶۴ هم پشتیبانی خواهد کرد.
در حقیقت می‌بینید که تاریخ تکرار می‌شود. APIهای ویندوز ۶۴ هم پشتیبانی خواهد کرد. در حقیقت می‌بینید که تاریخ تکرار می‌شود. APIهای ویندوز ۶۴ هنوز به‌صورت تجاری ارایه نشده است، بنابراین هنوز به‌صورت گسترده مورد استفاده قرار نگرفته است. برای همین پیش‌بینی می‌شود زمانی که استفاده از ویندوز ۶۴ گسترده شود، گروه توسعه دهند برای پشتیبانی آن اقدام خواهد کرد.
▪ مورد هشتم
Wine فقط برای لینوکس است (که با مورد دوم در تضاد است!!)
این مسئله به‌طور واضح‌نادرست است.درست است که Wine روی خیلی از پلاتفرم‌ها اجرا نمی‌شود، ولی بر روی لینوکس، FreeBSD و سلاریس اجرا می‌شود، پس Wine فقط برای لینوکس نیست.
در حال حاضر بسیاری از توسعه‌دهندگان روی لینوکس کار می‌کنند، بنابراین بهره‌گیری ازنسخه‌ای که برای پلاتفرم‌های غیر لینوکسی کامپایل نشده، ریسک بزرگی است. ولی بیشتر این مشکلات در نسخه‌های بالا برطرف می‌شود و تقریباً در سه سکوی ذکر شده مشکلی وجود ندارد.
▪ مورد نهم
Wine فقط برای IntelX۸۶
بلی. Wine فقط روی پردازنده‌های X۸۶ کار می‌کند و شاید وقت آن رسیده باشد که برای کاربران پردازنده‌های دیگر هم کارهای زیادی انجام شود. ولی ببینیم منظور از اجرا روی پردازنده X۸۶ چیست؟ شاید در ابتدا این معنی را بدهد که بتوان یک برنامه ویندوز را روی Sparc کامپایل کرد و آن را به WineLib لینک داد و سپس آن را روی سلاریس به اجرا گذاشت. البته این چیزی نیست که شما در ذهن‌تان داشتید. انجام این کارها خیلی محدودکننده و سخت به‌نظر می‌رسد، ولی در عین حال خیلی هم مفید هستند. این کارها در واقع یعنی اجرای آسان برنامه‌های ویندوز در معماری لینوکس. به هرحال این نخستین قدم اجازه دادن به Wine برای اجرا بر روی پردازنده‌هائی با معماری متفاوت است، ولی متأسفانه کدهای برنامه Wine روی پردازنده‌های دیگر قابل اجرا نیستند، زیرا بخش بزرگی از کدها به شناخت پردازنده نیاز دارند و این شناخت فقط برای X۸۶ امکان‌پذیر است.
بنابراین چیزی که همه منتظر آن هستند این است که برنامه‌های ویندوز X۸۶ را روی هر نوع معماری سی‌پی‌یو که دوست دارند، اجرا کنند. این کار پیچیدگی زیادی دارد و پیش نیازش این است که Winelib روی آن معماری کار کند ولی مطمئن باشید که این کار روزی اتفاق خواهد افتاد!
تنها عنصر لازم در این زمینه ترکیب یک emilator (مقلد) با Wine است.
▪ مورد دهم
بعضی بازی‌ها به‌خاطر محافظت از کپی شدن با Wine کار نمی‌کنند.
کارگزاران شرکت Trans Gaming کار زیادی برای محافظت از کپی شدن بازی‌هایشان انجام داده‌اند. آنها پشتیبانی از فرمت‌های رایجی هم‌چون SecRom و Safe Disc را به برنامه‌هایشان افزوده‌اند و به تازگی اجازه به کارگیری Safe Disc را از شرکت Macro Vision کسب کرده‌اند تا تغییرات مورد نظرشان را در هسته آن برای Wine انجام دهند.
هم‌اکنون در برنامه Wine پشتیبان‌هائی از Safe Disc۱ و Safe Disc۲ وجود دارد و پیش‌بینی احتیاطی هم برای اجرای Wine در ویندوز NT شده است (برای این کار باید فایل ”WineVer“nt۴۰ از برنامه Wine تنظیم شود).
▪ مشخصات Wine
۱) همسازی با باینری
ـ پشتیبانی از اجرای باینری‌های Wine۳۲ (۹X,NT,XP) Windows و داس. پشتیبانی از تابع‌های فراخوان ویندوزهای ۱۶ و ۳۲ بیتی
ـ اجرای کدهای ۱۶ و ۳۲ بیتی X۸۶.
ـ داشتن یک کتابخانه بزرگ از وقفه‌ها برای برنامه‌هائی که از حالت واقعی فرخوان‌های INTXX استفاده می‌کنند.
۲) گرافیک
ـ دارای گرافیک مبتنی بر X۱۱ که اجازه نمایش از راه دور را در ترمینال X می‌دهد.
ـ دارای فونت‌های نقش بیتی ویندوز و Trun Type.
ـ پشتیبانی از DirectX برای بازی‌ها. (پشتیبانی محدود از Direct ۳D وجود دارد)
ـ پشتیبانی از بازی‌های مبتنی بر OpenGL
ـ پشتیبانی از پرینت از طریق پست اسکریپت.
ـ دارای درایور متافایل و ویندوز با کدهای داخلی.
۳) با برنامه‌های ویندوز وصل شدن به:
ـ کارت‌های صدا
ـ پشتیبانی از صفحه کلید چند زبانه
ـ پشتیبانی از دستگاه مثل مودم و سریال
ـ پشتیبانی از شبکه‌های IPX , TCP/IP
ـ پشتیبانی از اسکنرهای ASPI
ـ پشتیبانی از Windows از طریق Xinput
۴) Wine API
ـ دارای نمونه APIهای Wine ۳۲ برای اطمینان یافتن از سازگاری
ـ سازگاری گسترده از کامپایلرهای زبان
ـ اجازه مخلوط شدن کدهای Wine ۳۲ با Posix
ـ تولید اسناد API به‌صورت خودکار
ـ دارای کامپایلر پیغام‌ها
ـ دارای کامپایلر IDL
ـ پشتیبانی گسترده از Unicode
ـ دارای برنامه‌های نمونه
ـ دارای برنامه‌ای در درون Wine برای اشکال‌زدائی و قابلیت تنظیم برای ردیابی پیغام‌ها