জিপিএলকে পচে যাওয়া বিবর্তনীয় অ্যালগরিদম ব্যবহার করে লিনাক্স কার্নেল লঙ্ঘন করেছে

Tldr: আমরা একটি বাইনারি কোডটি পচন করতে চাই বাইট সমতুল্য সি কোড। আমরা এটি একটি অপ্টিমাইজেশন দৃষ্টিকোণ থেকে তাকান। আমাদের একটি উত্পন্ন সি কোড (বা এএসটি) রয়েছে এবং আমরা এটি অনুকূল করতে চাই তাই আমরা যখন এটি সংকলন করি তখন এটি বাইনারি কোডের সমতুল্য, বাইট দ্বারা বাইট। এবং আমি মনে করি এটি করার জন্য জনসংখ্যা ভিত্তিক অপ্টিমাইজেশন মেটাহিউরিস্টিক ব্যবহার করা ভাল। যেমন জেনেটিক প্রোগ্রামিং।

এই পোস্টটি বোঝার প্রয়োজনীয়তা

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

ব্যাকস্টোরি

দ্রষ্টব্য: আপনি যদি জিপিএল লঙ্ঘন সম্পর্কে জানেন যা কার্নেল উত্স কোড প্রকাশ না করে ঘটে তবে আপনি এই অংশটি এড়িয়ে যেতে পারেন।

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

লিনাক্স একটি খুব পরিপক্ক বাস্তুতন্ত্র সহ বিনামূল্যে এবং ওপেন সোর্স সফ্টওয়্যার। এবং নিখরচায়, আমি উভয়ই এই অর্থে বোঝাতে চাই যে এটি লিব্রে এবং এটি শূন্য ব্যয় (তাদের জন্য)। এটি সংস্থাগুলির জন্য দুর্দান্ত পছন্দ তাই তাদের স্ক্র্যাচ থেকে কার্নেল লেখার দরকার নেই। খুব কম প্রোগ্রামার আছেন যারা কার্নেল লিখতে পারেন। এমনকি যারা স্ট্যান্ডার্ড, উচ্চ মানের, পঠনযোগ্য কোডও লেখেন। তাই তারা লিনাক্স বেছে নেয়। তারা বিনামূল্যে রাতের খাবার পান। এটি খেতে তাদের কেবল চামচ এবং কাঁটাচামচ আনতে হবে।

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

যাইহোক, প্রায় সবসময় যেমন তারা আপনাকে তাত্ত্বিকভাবে একটি জিনিস শেখায়। এবং অনুশীলনে, আপনাকে তাদের সমস্ত সম্পর্কে ভুলে যাওয়া দরকার।

যেহেতু কার্নেল সোর্স কোড থাকা ঠিক যেভাবেই আমি ঠিক তাই, এবং তারা এটি আমাকে দেবে না। আমি এটিকে মেসেল্ফ নেওয়ার কথা বিবেচনা করছি। আমরা যদি কোনওভাবে বাইনারি কার্নেল কোডটি সি কোডে ডেকে আনতে পারি একই শব্দার্থকতারপরে আমরা আরও ভাল অবস্থানে আছি এবং আমার ডিভাইসের মূললাইনটির কাছাকাছি।

লক্ষ্য কি?

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

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

আমরা কীভাবে এটি অর্জন করব?

সংক্ষিপ্ত উত্তর

আমি সত্যিই জানি না। এবং আমি বাজি ধরছি আর কেউ না!

দীর্ঘ উত্তর

সময় প্রয়োজন

এটি একটি গবেষণা ধারণা এবং দীর্ঘমেয়াদী জন্য একটি ধারণা। গবেষণা নিজেই একটি অপ্টিমাইজেশন সমস্যা হিসাবে দেখা যেতে পারে! এর অর্থ হ’ল আপনি জানেন না যে এই পুরো অঞ্চলটি আপনি যতটা নিখুঁত হতে চান ততটা নিখুঁত কিছু পেয়েছে কিনা। বা যদি এটি একটি পেয়ে থাকে তবে আসুন সর্বাধিক বলি, এটি কোথায় বা এটি পৌঁছাতে আপনার কতক্ষণ সময় লাগবে। এটা ঠিক আপনার পাশে হতে পারে। তবে আপনি হয়ত জানেন না কোন দিকটি। অথবা এটি অনেক দূরে হতে পারে।

তবে আমরা কিছু পরিকল্পনা এবং শিক্ষিত অনুমান করতে পারি। আমি পচন সম্পর্কে বা কার্নেল সম্পর্কে শিক্ষিত নই। তবে ওহে! এটি কেবল অন্য একটি অপ্টিমাইজেশন সমস্যা! আছে একটি গবেষণা কাগজ কয়েক বছর আগে থেকে যা প্রথম ধারণাটি মুদ্রা করে বাইট সমতুল্য পচনশীল যতদূর আমি জানি। আমি যা বুঝতে পেরেছি তা থেকে তারা কেবল “সম্ভাব্যতা” দেখাতে চেয়েছিল। তাদের পদ্ধতি পারে ক্ষয় ক্ষুদ্র (~ 20loc) সি প্রোগ্রাম। তারা ব্যবহার করেছিল বিবর্তনীয় অ্যালগরিদম এই লক্ষ্যে পৌঁছাতে। এবং তারা বাইনারিটিকে আইআর তে রূপান্তরিত করেনি।

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

প্রাথমিক জনসংখ্যা উত্পন্ন করা

সাধারণত ইএএসে, প্রাথমিক জনসংখ্যা এলোমেলোভাবে উত্পন্ন হয়। তবে এখানে, আমাদের এটি করা উচিত নয়। পরিবর্তে কিছু op ালু অর্ধেক সঠিক সি কোড আউটপুট করতে আমাদের কিছু (মেটা) হিউরিস্টিক ব্যবহার করা উচিত। যা থেকে আমরা আমাদের প্রাথমিক জনসংখ্যা উত্পন্ন করি।

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

বাইনারিটি পচে যাওয়ার জন্য অন্যান্য হিউরিস্টিকস বা অ্যালগরিদমও রয়েছে। বিছানা কাগজ দ্বারা রিপোর্ট করা, অন্য একটি “traditional তিহ্যবাহী” ডিকম্পিলার থেকে পচনশীল সি কোড ব্যবহার করে অনেক সাহায্য করেছিল।

আমাদের সি কোড উপস্থাপন

আমাদের সম্ভবত সি কোডের প্রতিনিধি হিসাবে একটি এএসটি ব্যবহার করতে হবে। এটি সরাসরি সি কোডের সাথে কাজ করার চেয়ে অনেক বেশি প্রাকৃতিক। আমরা কেবল বৈধ এএসটিএসকে অনুমতি দিয়ে আমাদের অনুসন্ধানের স্থানটিকে আরও ছোট করার চেষ্টা করতে পারি। উদাহরণস্বরূপ যখন ক্রস ওভার বা মিউটেশন করা হয়, তখন তাদের আউটপুটগুলি অবশ্যই একটি বৈধ সি এএসটি হতে হবে। অনুসন্ধানের স্থান সীমাবদ্ধ করার অন্যান্য উপায় রয়েছে। উদাহরণস্বরূপ, আমরা পুরোপুরি কিছু সি বৈশিষ্ট্যগুলি সরিয়ে ফেলতে পারি। আমি সি এর সাথে উন্নত নই, তবে আমি মনে করি আমরা ব্যতীত অন্য কোনও লুপ সরিয়ে ফেলতে পারি while। এছাড়াও আমরা পুরোপুরি যেতে দিতে পারে structএস। এরপরে আমরা সনাক্ত করতে কিছু হিউরিস্টিক ব্যবহার করতে পারি যেখানে পয়েন্টারগুলির একগুচ্ছ আসলে একটি কাঠামো। বা যেখানে কিছুক্ষণ লুপ হওয়া উচিত ছিল for লুপ

বাইনারি কোড উপস্থাপন

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

বিবর্তনীয় কেন?

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

সি কোডটি পঠনযোগ্য করে তোলা

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

এছাড়াও পরে, জেনেটিক উন্নতি দরকারী হতে পারে।

অন্যান্য বিবিধ নোট

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

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

আমি কি এটা করতে যাচ্ছি?

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

Source link

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।