سلام
من منظورم اصلا این نبود برنامه با ام ام بی ساخته شده. فرض میگیریم با دلفی نوشته شده باشه. من منظورم راهکاری برای فهم نوع سیستم عامل هستش. شما فرض بکنید بنده برنامه ای میخوام با سی بنویسم و نمیخوام داخل سیستم عاملی جز ویندوز اجرا بشه. راهکارش چیه؟
در رابطه با فرمایشتون هم بنده تست نکردم اما دوستان فرمودن برنامه ساخته شده با بیلدر در لینوکس اجرا میشه.
سوالتون در انجمنی مطرح شده که مربوط به MMB ئه، اما کلا برای زبانهای کامپایلری این قضیه مشترک ئه.
از نظر فنی همچین اتفاقی نمیافته، شما فرضا کدی به زبان C یا Delphi یا VB و ... می نویسید، این کد فقط متن ئه، همینطوری که قابل اجرا نیست، ولی با کمک یک کامپایلر تبدیل به یک نسخه قابل اجرا برای سیستم عامل میشه، مثل همون فایل های exe که فقط و فقط مخصوص سیستم عامل مشخصیه، فرضا ویندوز. دلیلش اینه که فرمت و ساختار فایل اجرایی در سیستم عامل ها یکسان نیست که ابهامی پیش بیاد. بعضی زبان ها برای چندین سیستم عامل کامپایلر دارند شما می توانید یک کد رو یه شرط وجود با کامپایلر های متفاوت برای سیستم عامل های متفاوتی Build کنید و اما هر کدوم از اون فایل های اجرایی که کامپایلر ایجاد میکنه، صرفا برای یک سیستم عامل خاصی قابل استفاده اند، به همین جهت شما همون موقع که دارید کدتون رو Build میکنید خودتون میدانید که فایل اجرایی روی چه سیستم عاملی اجرا خواهد شد. هیچ ابهامی وجود نداره که کدتون بخواهد در زمان اجرا تشخیص اش بده. شما نمی توانید یک فایل اجرایی که برای سیستم عامل خاصی طراحی شده رو روی سیستم عامل ناسازگار دیگری اجرا کنید، عملی نیست.
بعضی زبان ها هم مفسری هستند، مثل بیسیک یا جاوا اسکریپت، یعنی کامپایلر ندارند؛ کد هر بار موقع اجرا تفسیر میشه تا قابل اجرا بشه، که معمولا چند پلتفرمی هستند، یعنی سیستم عامل های متفاوتی میتونه اجرا کننده شون باشه، که معمولا کاری با سیستم عامل ندارند. گاهی در خود زبان و کتابخانه هاشون قابلیتی دارند که بشه سیستم عامل میزبان رو تشخیص داد.
یک زبان هایی هم ماشین مجازی دارند، مثل جاوا و #C و ویژوال بیسیک، که کامپایلر دارند ولی کامپایلرشون کد رو برای ماشین مجازی خاص خودش ترجمه میکنه نه سیستم و پردازنده واقعی. که اونها هم معمولا در خود زبان و کتابخانه هاشون قابلیتی دارند که بشه سیستم عامل میزبان رو تشخیص داد.