ম্যাক ওএস এক্স এবং লিনাক্সের মধ্যে বাইনারি সামঞ্জস্য


27

নিজেকে ধুয়ে ফেলুন, এই প্রশ্নটি সম্ভবত নির্বোধ এবং / অথবা বোকামি হিসাবে উপস্থিত হবে, কারণ আমি ইউনিক্সের মতো সিস্টেমের মতো অভ্যন্তরীণ কাজগুলি এবং সাধারণভাবে প্রোগ্রামিংয়ের ক্ষেত্রে তুলনামূলকভাবে নতুন seeing

প্রস্তুত? ঠিক আছে! আমি প্রায় 3 স্তরের লুডিক্রোসিটির মধ্য দিয়ে যাব, আমি যতই এগিয়ে যাব তত বাড়ছে।


আমাদের একই ধরণের হার্ডওয়্যার সহ দুটি সিস্টেম রয়েছে (মূল পয়েন্টটি প্রসেসর হচ্ছে, আসুন আমরা একটি স্ট্যান্ডার্ড ইন্টেল কোর 2 যুগল বলি)।

একটি চলছে (আপনার লিনাক্স ডিস্ট্রোটি এখানে sertোকান: উবুন্টু এর পরে ব্যবহার করা হবে), এবং অন্যটি চলছে ম্যাক ওএস এক্স বলে।

একটি একটি সমতুল্য প্রোগ্রাম সংকলন করে আসুন এর মতো কিছু বলা যাক:

int main()
{
    int cat = 33;
    int dog = 5*cat;
    return dog;
}

কোডটি অত্যন্ত সহজ, কারণ আমি এখনও ভাগ করা লাইব্রেরিগুলির প্রভাবগুলি বিবেচনা করতে চাই না।

যখন সংশ্লিষ্ট সিস্টেমে সংকলিত হয়। ELF বনাম ম্যাচ-ও এর আউটপুটটির মধ্যে মূল পার্থক্য নয়? যদি কোনও একটি ফ্ল্যাট বাইনারি রেখে বিন্যাসের প্রতিটি বাইনারি ফেলা হয় তবে বিচ্ছিন্ন মেশিনের নির্দেশাবলী কি একই হবে না? (সংকলক অভ্যাস / প্রবণতা উপর নির্ভর করে সম্ভবত কয়েকটি পার্থক্য সহ)।

১) আমাদের উবুন্টু সিস্টেম থেকে উত্পাদিত ফ্ল্যাট বাইনারিটিকে ম্যাক-ও ফর্ম্যাটিংয়ে পুনরায় চালু করার জন্য যদি কোনও প্রোগ্রাম তৈরি করা হয়, তবে এটি ম্যাক ওএস এক্স সিস্টেমে চালিত হবে? তারপরে, যদি কারও কাছে উপরের অনুমিত প্রোগ্রামটির কেবল বাইনারি সংকলন থাকে এবং ফ্ল্যাট বাইনারিগুলি পুনঃস্থাপনের জন্য কারও কাছে এই রহস্যময় সরঞ্জাম থাকে, তবে কি সাধারণ প্রোগ্রামগুলি ম্যাক ওএস এক্স সিস্টেমে চালাতে সক্ষম হবে?


এখন এটি আরও কিছুটা এগিয়ে নেওয়া যাক।

আমাদের কাছে এখন উত্স সহ একটি প্রোগ্রাম রয়েছে:

#include <stdio.h>
int main()
{
    printf("I like tortoises, but not porpoises");
    return 0;
}

২) এই প্রোগ্রামটি সংকলিত এবং স্থিতিশীলভাবে সংযুক্ত রয়েছে বলে ধরে নেওয়া, আমাদের যাদুকরী প্রোগ্রামটি কি এখনও ম্যাক-ও ফর্ম্যাটে কাঁচা বাইনারিটিকে পুনঃস্থাপন করতে সক্ষম হবে এবং এটি ম্যাক ওএস এক্সে কাজ করবে? এটি দেখতে অন্য কোনও বাইনারিগুলির উপর নির্ভর করার দরকার পড়বে না, (যার জন্য এই ক্ষেত্রে ম্যাক সিস্টেমের দরকার নেই)


এবং এখন চূড়ান্ত স্তরের জন্য;

৩) কী যদি আমরা এই অনুমিত প্রোগ্রামটি সমস্ত প্রয়োজনীয় ভাগ করা লাইব্রেরিগুলিকে মাচ-ও ফর্ম্যাটে রূপান্তর করতে ব্যবহার করি এবং তারপরে গতিশীল লিঙ্কিংয়ের সাথে উপরের প্রোগ্রামটি সংকলন করি। প্রোগ্রামটি কি এখনও চালাতে সফল হবে?

এটি আপাতত এটি হওয়া উচিত, স্পষ্টতই অযৌক্তিকতার প্রতিটি ধাপ পূর্বের বেসের উপর নির্ভর করে, এমনকি বুদ্ধিমানও। সুতরাং যদি প্রথম স্তম্ভটি ধ্বংস হয়ে যায় তবে আমি সন্দেহ করি যে বাকী স্তরগুলির মধ্যে আরও যোগ্যতা থাকবে।

আমি অবশ্যই জিইআইআই-এর কথা মাথায় রেখে প্রোগ্রামগুলি নিয়ে এ পর্যন্ত ভাবতে পারি না। উইন্ডোয়িং সিস্টেমগুলি সম্ভবত পুরো অন্যান্য মাথা ব্যাথা হতে পারে। আমি এই পর্যায়ে কেবল কমান্ড লাইনের প্রোগ্রামগুলি বিবেচনা করছি।

এখন, আমি আমাকে সংশোধন করার জন্য বিশ্বকে আমন্ত্রণ জানাই, এবং আমার অযৌক্তিক চিন্তাভাবনার লাইনটি যা ভুল তা বলুন।


: OS X এর বাইনারি জন্য মদ সমতুল্য ডার্লিং হয় darling.dolezel.info
strugee

উত্তর:


25

আপনি একটি গুরুত্বপূর্ণ বিষয়টি ভুলে গেছেন, অর্থাত্ আপনার প্রোগ্রামটি আকর্ষণীয় কিছু করার জন্য অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে হবে।

কনভেনশনগুলি লিনাক্স এবং ওএস এক্স এর মধ্যে পৃথক পৃথক তাই একই বাইনারিটি চলতে পারে না অপরিহার্যভাবে সিস্টেমের সাথে নির্ভরশীল কোডের একটি অংশ না থাকলে এটির সাথে ইন্টারঅ্যাক্ট করতে সক্ষম হয়। এর মধ্যে অনেকগুলি জিনিস গ্রন্থাগারে লুকিয়ে রয়েছে, যা আপনার তারপরে লিংক করা উচিত এবং এর অর্থ আপনার প্রোগ্রামটি লিঙ্কযোগ্য হওয়া দরকার এবং দুটি সিস্টেমের মধ্যে লিঙ্কিংও আলাদা।

এবং তাই এটি এবং এগিয়ে যায়। একই জিনিসটি করার মতো ভূপৃষ্ঠে যা শোনাচ্ছে তা প্রকৃত বিবরণে খুব আলাদা।


5
সমস্যাটি কী তা সম্পর্কে এটি মূলত সঠিক, তবে সমস্যাটি সত্যই লাইব্রেরি নয় (এটি পাশাপাশি টানা যেতে পারে) তবে সিস্টেম কল, যা ওএস কার্নেলের অনুরোধ। যদি ওএস কোনও সামঞ্জস্যপূর্ণ সিস্টেম কল ইন্টারফেস সরবরাহ না করে তবে আপনার ভাগ্যের বাইরে।
ম্যাচটিএম

1
আহ, এটা দুর্দান্ত। এটি ঠিক এমন ধরণের গঠনমূলক সংশোধনের জন্য আমি আশা করছিলাম। একগুচ্ছকে ধন্যবাদ: ডি আপনি কি এই অনুমিত সিস্টেম কল সম্পর্কে আমাকে আরও বলতে পারেন বা আমাকে কোথাও পুনর্নির্দেশ করতে পারেন যে আমি তাদের সম্পর্কে আরও শিখতে পারি?
জেক

3
তারা "অনুমিত" নয়, তারা আসল। :) এখানে একটি ভাল শুরু: আইবিএম
ডেভেলপ

7
এটি বলেছিল, আপনার "ক্রেজি" ধারণা সম্পূর্ণ অসম্ভব নয়। শুধু অনেক কাজ। ওয়াইন প্রকল্পটি মূলত এটি লিনাক্সে (বা ওএস এক্স) এমএস উইন্ডোজ বাইনারিগুলি চালানোর জন্য। এটি সিস্টেম কলগুলির জন্য একটি অনুবাদ স্তর সরবরাহ করে। wiki.winehq.org/…
mattdm

1
ঠিক আছে, আমি অনুভব করেছি যে এটি সম্পূর্ণরূপে অসম্ভব হবে না, তবে আমি এটি বর্ণনা করার মতো প্রায় সহজ হওয়ার আশাও করিনি। আমি সংশোধন করার অভিপ্রায় নিয়ে প্রশ্নটি লিখেছিলাম। এটি "ম্যাক ওএসে চালানোর জন্য আমি কীভাবে একটি লিনাক্স বাইনারি রূপান্তর করব" এর মতো সরাসরি প্রশ্ন জিজ্ঞাসার চেয়ে বিষয়টিকে হৃদয়ের কাছে যাওয়ার আরও কার্যকর পদ্ধতির মতো মনে হয়। এছাড়াও আমি সময়ে সময়ে ওয়াইন ব্যবহার করেছি, তবে এটি কীভাবে কাজ করে তা নিয়ে আমি কখনই চিন্তা করে দেখিনি, আমি মনে করি যে আমি এখনই এটি একবারে দেখব go
জেক

17

যদি কেউ এটি ঘটানোর জন্য পর্যাপ্ত সময় ব্যয় করতে চায় তবে এটি করণীয়। ডার্লিং প্রকল্পের এই প্রয়াস করছে, যদিও এই লেখার হিসাবে, এটি একটি চমত্কার আদিম অবস্থায় আছে।

এটি অন্যান্য প্ল্যাটফর্মে আগে সফলভাবে সম্পন্ন হয়েছে:

  • সোলারিস এবং ইউনিক্সওয়েয়ার নামে একটি সহায়ক প্রোগ্রাম অন্তর্ভুক্ত রয়েছে lxrunযা এর মতো কিছু কাজ করে sudo: আপনি নিজের এক্সিকিউটেবল নাম এবং প্যারামিটারগুলি সাহায্যকারীর কাছে প্রেরণ করেন এবং এটি জিনিসগুলিকে গতিশীলভাবে ঠিক করে দেয় যাতে এক্সিকিউটেবল ওএসের সাথে কথা বলতে পারে। অফিসিয়াল সাইট (নিচে, সংরক্ষণাগার লিংক ) এটিকে বলছেন bitrotted

  • লিনাক্সের কার্নেলটিতে একবার আইবিসিএস নামে একটি বৈশিষ্ট্য ছিল যা বিপরীত করেছিল, কেবল এটির জন্য কোনও সহায়কের প্রয়োজন নেই কারণ কার্নেলটি সরাসরি "বিদেশী" বাইনারিগুলি স্বীকৃতি দেয়। এটি কার্নেল ২.৩ বিকাশের সিরিজের সময় অকার্যকর হয়ে পড়েছিল , সম্ভবত সম্ভবত ছোট ইউনিক্স সার্ভারের যুদ্ধের মূলত ২.৪ বার একবার এসেছিল।

  • ফ্রিবিএসডি-র কার্নেলটি লিনাক্স বাইনারি সনাক্ত করতে এবং সেগুলি দেশীয় বলে চালানোর জন্য কনফিগার করা যেতে পারে । এই বৈশিষ্ট্যটি উপরের দুটিটির চেয়ে আরও ভাল আকারে প্রদর্শিত হবে।

    ওপেনবিএসডি এবং নেটবিএসডি এর একই বৈশিষ্ট্য রয়েছে।

ওএস এক্স এর মধ্যে অনেকগুলি ফ্রিবিএসডি রয়েছে , সুতরাং এর লিনাক্স সমর্থনটি পোর্ট করা সহজবোধ্য হতে পারে।


2
লিনাক্স প্রোগ্রামগুলির জন্য এটি কোনও বড় চুক্তি না হওয়ার একটি কারণ → অন্যান্য প্ল্যাটফর্মগুলি হ'ল: কোনও গুরুত্বপূর্ণ লিনাক্স-কেবল অ্যাপ নেই যার উত্স উপলভ্য নয়। আপনি ওএস এক্স বা সোলারিসে আপনার প্রোগ্রামটি চালাতে চান, এটি পুনরায় সংকলন করতে পারেন এবং আপনি যেতে পারেন। লিনাক্স-নির্দিষ্ট উপায়ে কোডটি লেখা হয়েছিল সেখানে করার জন্য কিছুটা পোর্টিং থাকতে পারে, তবে সাধারণত এটি সামঞ্জস্যতার স্তর বজায় রাখার তুলনায় খুব বেশি কাজ করে না। ফ্রিবিএসডি-র লিনাক্স সামঞ্জস্যতা তখন বড় ব্যাপার ছিল যখন নেটস্কেপ কেবল লিনাক্সের জন্য বাইনারি বিতরণ করা হয়েছিল এবং সম্ভবত এখনও অ্যাডোব ফ্ল্যাশ প্লেয়ারের জন্য ব্যবহৃত হয়।
mattdm

@ জার্গ ডব্লু মিটাগ - এছাড়াও, আপনার অন্যান্য প্ল্যাটফর্মের সিস্টেম লাইব্রেরিগুলি থাকা দরকার। এটি অটোজোনগুলির বিরুদ্ধে তাদের মামলাগুলির ভিত্তি হতে পারে। তবে সত্যই আমি বিবরণগুলি ভুলে গিয়েছি এবং সবে যত্নশীল। :)
ম্যাচটিএম

সুতরাং আপনি যা বলছেন তা মূলত, অপারেটিং সিস্টেম এক্স যদি অপারেটিং সিস্টেম ওয়াইয়ের মতো একই পরিষেবা সরবরাহ করে তবে একটি বাইনারি উভয়ের অধীনে চলতে পারে। এটি সত্য হয়, কিন্তু সিস্টেম এক্স একটি ইচ্ছাকৃত প্রচেষ্টার প্রয়োজন আমি OS X এর সঙ্গে এই ভাবে সামঞ্জস্যপূর্ণ হচ্ছে কোন অপারেটিং সিস্টেমের অবিদিত am
Thorbjørn Ravn অ্যান্ডারসনকে

bitrotten? আমি নিজেকে দেখাতে হবে।
জিএনপি

3

আমি সবার সাথে একমত হয়েছি, তবে আমি এটি যুক্ত করতে চাই, যদিও এটিতে উল্লেখযোগ্য পরিমাণ সময় এবং প্রচেষ্টা লাগবে, ওয়াইন বিকাশে এটি যতটা লেগেছে তেমনটা হবে না।

ওয়াইন বিকাশের বেশিরভাগ অসুবিধা হ'ল তারা একটি বদ্ধ উত্স অপারেটিং সিস্টেম থেকে বাইনারি ফর্ম্যাট পোর্ট করছে এবং সিস্টেম কলগুলির অনেকগুলিই অননুমোদিত। তাদের অপারেটিং সিস্টেমটি মূলত বিপরীত ইঞ্জিনিয়ারকে করতে হয়েছিল।

যদি কেউ এই কাজটি একটি ওপেন ওএস থেকে অন্য একটি ওপেন ওএসে করতে থাকে তবে তারা সম্ভবত এটি 1/10 সময়কালের মধ্যে সম্পন্ন করতে পারে, কারণ সামঞ্জস্যতা স্তরটি খুব সহজেই অন্য OS থেকে অনুলিপি করে অনুলিপি / আটকানো যেতে পারে যদি কোনও সমমানের নেটিভ সিস্টেম কল হয় অস্তিত্ব নেই। অবশ্যই, পসিক্স বিশ্ব জুড়ে বেশিরভাগ ক্ষেত্রেই একটি নেটিভ কল উপলব্ধ থাকবে।

নোটের আর একটি প্রকল্প হ'ল রিঅ্যাক্টোস, যেখানে তারা মূলত উইন্ডোজের একটি সম্পূর্ণ বাইনারি-সামঞ্জস্যপূর্ণ সংস্করণ তৈরি করছে ... ওয়াইনের প্রয়োজন নেই।


1

এটি ম্যাকোজে প্রযুক্তিগতভাবে কার্যকর তবে তাত্পর্যপূর্ণ প্রচেষ্টা ছাড়াই নয়, যদিও কিছু প্রচেষ্টা ইতিমধ্যে আমাদের হয়ে গেছে।

  • উভয়ই ম্যাকোস এবং একটি পুনর্বিবেষ্টিত রেড হ্যাট এন্টারপ্রাইজ লিনাক্স ইউনিক্স 03 সার্টিফিকেট করা হয়েছে This এর অর্থ নীতিগতভাবে পসিক্স কলগুলির একই API হওয়া উচিত।
  • ম্যাকোস এবং লিনাক্স উভয়ই amd64 প্ল্যাটফর্মের জন্য সিস্টেম ভি এবিআই ব্যবহার করে। এর অর্থ এটি amd64 ম্যাকোস এবং লিনাক্সের জন্য উপযুক্ত এবিআই এবং এপিআই থাকা উচিত।
  • লিনাক্স ইএলএফ ব্যবহার করার সময় ম্যাকোস ম্যাক-ওকে তার স্থানীয় নির্বাহযোগ্য বিন্যাস হিসাবে ব্যবহার করে। এটি জিনিসগুলিকে আরও সহজ করে তোলে, কারণ এক্সিকিউটেবল ফাইল ফর্ম্যাটটি উপযুক্ততা স্তরটি কল করা উচিত কিনা তা পৃথক করতে ব্যবহার করা যেতে পারে। binfmt_miscযদিও এর মতো কিছু প্রয়োজন ।
  • সেখানে একটি তৃতীয় পক্ষের ম্যাকোস কার্নেল এক্সটেনশন রয়েছে যা হুবহু এটি সরবরাহ করে। এখন আমাদের ইএলএফ লোড করার জন্য ম্যাকোসকে বোঝানোর একটি উপায় রয়েছে, আমাদের আমাদের বিশেষ প্রয়োজন ld-linux.soযা নিজেই একটি ম্যাচ-ও এক্সিকিউটেবল যা আমাদের ইএলএফ লোড করে এটি চালাতে পারে।

এখন আমাদের যা প্রয়োজন তা অন্তত একটি বিশেষ ld-linux.soযা নিম্নলিখিতগুলি করতে পারে:

  • মাচ-ও এক্সিকিউটেবল বা dyldনিজেই হোন ,
  • লিনাক্স ইএলএফ ফাইলগুলি সঠিক ঠিকানায় মেমরিতে লোড করতে পারে,
  • আশা রাখি, MacOS বেশী (উদাহরণস্বরূপ লিনাক্স soname ম্যাপ করার ক্ষমতা থাকবে /lib/libc.so.6করার /lib/libSystem.B.dylib,) ও লোড সংশ্লিষ্ট মাপক-হে যখন একটি মানানসই ELF পাওয়া যায় না তাই আমরা MacOS লাইব্রেরি পুনরায় ব্যবহার করতে পারেন

ELF এর ঠিক উপরে যে লোডারটি সরাসরি সিস্কলগুলি তৈরি করে না তার কাজ করার ভাল সুযোগ রয়েছে তবে সিস্কল সহ ইএলএফ কাজ নাও করতে পারে। দ্বিতীয় উপাদান যা কার্যকর হতে পারে তা হ'ল একটি কার্নেল এক্সটেনশন যা সেই লিনাক্স সিস্কলগুলি ধরে এবং ম্যাকোসগুলিতে সেগুলি ম্যাপ করে। ডেস্কটপ ব্যবহার হিসাবে, লিনাক্স গ্রাফিক্স কলগুলিতে OpenGL.frameworkএবং ম্যাপ করার জন্য বিশেষ মেসা বাস্তবায়ন প্রয়োজন Metal.framework


0

অনেকগুলি বিশেষায়িত লিনাক্স অ্যাপ রয়েছে যার জন্য এটি দুর্দান্ত সাহায্য হবে great এফপিজিএ সাইডে, কোয়ার্টাস এবং ভিভাডো লিনাক্সের অধীনে চলমান প্রোগ্রামগুলির ভাল উদাহরণ এবং তাদের জন্য বা সর্বশেষতম এফপিজিএগুলিকে লক্ষ্য করে এমন অনুরূপ প্রোগ্রামগুলির জন্য উত্স কোডের সম্ভাবনা নেই।

আমি মনে করি আপনার প্রশ্নের সহজ উত্তর হ'ল: ম্যাকওএসে পুনরায় কম্পাইল করুন যেখানে আপনার উত্স রয়েছে এবং সময় থাকলে সামর্থ্য সরবরাহ করার জন্য একটি গোষ্ঠী গঠন করুন - এবং এটি একটি সময় সাপেক্ষ কাজ হবে task

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.