স্যান্ডবক্সড API ব্যাখ্যা করা হয়েছে

স্যান্ডবক্সড API (SAPI) সুপ্রতিষ্ঠিত স্যান্ডবক্স2 প্রকল্পের উপরে তৈরি করে। এই পৃষ্ঠাটি SAPI এর ডিজাইন আর্কিটেকচার এবং মূল ধারণাগুলি ব্যাখ্যা করে।

ওভারভিউ

SAPI ডেভেলপারদেরকে স্যান্ডবক্সিং-এর জন্য C/C++ লাইব্রেরি প্রস্তুত করার জন্য, সেইসাথে C/C++ লাইব্রেরির স্যান্ডবক্সযুক্ত সংস্করণের সাথে যোগাযোগের জন্য প্রয়োজনীয় API-এর জন্য টুল সরবরাহ করার জন্য ডিজাইন করা হয়েছে।

এই চিত্রটি একটি SAPI স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরির আর্কিটেকচার দেখায়:

SAPI ডায়াগ্রাম

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

অবশেষে, একটি উচ্চ-স্তরের লেনদেন API SAPI লাইব্রেরিগুলি পর্যবেক্ষণ করতে সক্ষম করে, এবং যদি তারা ব্যর্থ হয় (উদাহরণস্বরূপ, নিরাপত্তা লঙ্ঘন, ক্র্যাশ, বা সংস্থান ক্লান্তির কারণে) তাদের পুনরায় চালু করে।

স্যান্ডবক্স2

ওপেন-সোর্স প্রজেক্ট স্যান্ডবক্স২ গুগল সিকিউরিটি ইঞ্জিনিয়ারদের দ্বারা তৈরি এবং রক্ষণাবেক্ষণ করা হয়েছে এবং এটি SAPI দ্বারা ব্যবহৃত মূল স্যান্ডবক্সিং প্রযুক্তি। স্যান্ডবক্স2-এ তিনটি প্রধান উপাদান রয়েছে, স্যান্ডবক্স নীতি , নির্বাহক এবং স্যান্ডবক্সী

স্যান্ডবক্স নীতি

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

SAPI একটি ডিফল্ট নীতি ব্যবহার করে, বিকল্পভাবে আপনি একটি ডেডিকেটেড স্যান্ডবক্স নীতি ব্যবহার করতে পারেন এটিকে একটি sandbox.h হেডার ফাইলে সংজ্ঞায়িত করে এবং এটিকে sapi_library বিল্ড নিয়মে একটি আর্গুমেন্ট হিসেবে পাস করে।

স্যান্ডবক্সযুক্ত লাইব্রেরি

এটি স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরি যা স্যান্ডবক্স2 দ্বারা প্রদত্ত সীমাবদ্ধ স্যান্ডবক্স পরিবেশে কার্যকর করা হবে। শেষ পর্যন্ত, স্যান্ডবক্সড লাইব্রেরি প্রয়োজনীয় কার্যকারিতা প্রকাশ করে যা হোস্ট কোড দ্বারা ব্যবহার করা যেতে পারে।

স্যান্ডবক্সড লাইব্রেরিটি sapi_library বিল্ড নিয়মের সাথে তৈরি করা হয়েছে, যেখানে আপনি একটি কাস্টমাইজড স্যান্ডবক্স নীতি নির্দিষ্ট করতে পারেন যা সীমাবদ্ধ কার্যকর পরিবেশকে সংজ্ঞায়িত করে। লাইব্রেরির উপর নির্ভর করে, আপনাকে র‍্যাপার বা স্টাব কোড লিখতে হতে পারে ( libcurl দেখুন), কিন্তু SAPI সংস্করণ প্রস্তুত করার সময় আপনি C/C++ লাইব্রেরির সোর্স কোড পরিবর্তন করবেন বলে আশা করা হচ্ছে না।

SAPI অবজেক্ট এবং RPC স্টাব

SAPI অবজেক্ট হল একটি C++ অবজেক্ট যা স্যান্ডবক্সড লাইব্রেরির API প্রকাশ করে। এটি হোস্ট কোড থেকে RPC স্টাব-এ কল ফরওয়ার্ড করে, যা স্যান্ডবক্সড লাইব্রেরির সাথে SAPI লাইব্রেরিতে এমবেড করা আছে।

এই দুটি উপাদান স্বয়ংক্রিয়ভাবে sapi_library() বিল্ড নিয়ম ব্যবহার করে বিল্ড সিস্টেম দ্বারা তৈরি হয়। SAPI দুটি বিল্ড সিস্টেম সমর্থন করে, Google এর Bazel এবং CMake

হোস্ট কোড

হোস্ট কোড হল যা SAPI লাইব্রেরি দ্বারা প্রদত্ত যুক্তি প্রয়োগ করে। এটি অন্যথায় C/C++ লাইব্রেরির আনস্যান্ডবক্সড সংস্করণ ব্যবহার করবে। যেমন, হোস্ট কোড SAPI লাইব্রেরি দ্বারা রপ্তানি করা ফাংশনগুলিকে কল করে, স্যান্ডবক্সে ডেটা পাঠায় এবং ডেটা গ্রহণ করে।

হোস্ট কোড SAPI লাইব্রেরি ব্যবহার করার জন্য অভিযোজিত করা প্রয়োজন। সবচেয়ে উল্লেখযোগ্যভাবে, লাইব্রেরির ফাংশনগুলিকে কল করা সম্ভব নয় কারণ লাইব্রেরিটি একটি পৃথক স্যান্ডবক্সড প্রক্রিয়ায় থাকে৷ অতএব, SAPI এমন সরঞ্জাম সরবরাহ করে যা একটি SAPI অবজেক্ট তৈরি করে যা একটি SAPI লাইব্রেরিতে প্রক্সি কল করে।

ধারণা

Bazel বিল্ড নিয়ম

SAPI প্রকল্প একটি C/C++ লাইব্রেরি স্যান্ডবক্সিং করার জন্য দুটি বেজেল বিল্ড নিয়ম প্রদান করে:

  • sapi_library() - C/C++ লাইব্রেরি স্যান্ডবক্স2 স্যান্ডবক্সী হিসাবে স্যান্ডবক্স করার জন্য প্রয়োজনীয় সমস্ত আউটপুট তৈরি করে। হোস্ট কোড বাইনারি তৈরি করতে ব্যবহৃত cc_binary() নিয়মের নির্ভরতা হিসাবে বিল্ড আউটপুট ব্যবহার করা যেতে পারে।
  • sapi_interface() - স্বয়ংক্রিয়ভাবে হেডার তৈরি করে যা হোস্ট কোড বাইনারিতে অন্তর্ভুক্ত করা যেতে পারে।

বিল্ড বিধিগুলির আরও বিস্তৃত ব্যাখ্যার জন্য, বিল্ড নিয়ম দেখুন।

ভেরিয়েবল

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

এই বিষয়ের আরও বিস্তৃত ব্যাখ্যা এবং কিছু সাধারণভাবে ব্যবহৃত SAPI প্রকারের একটি সংক্ষিপ্ত বিবরণের জন্য, ভেরিয়েবল দেখুন।

লেনদেন

উপরে ব্যাখ্যা করা হয়েছে, একটি স্যান্ডবক্সড লাইব্রেরিতে যেকোন API কল একটি RPC স্তরের উপর দিয়ে যায়। এই স্তরে একটি ব্যর্থতা পরিচালনা করতে সক্ষম হতে, আপনাকে যথাযথ ত্রুটি হ্যান্ডলিং বাস্তবায়ন করতে হবে। SAPI লেনদেন মডিউল একটি স্যান্ডবক্সড লাইব্রেরিতে সমস্ত কলগুলি কোনও RPC-স্তরের সমস্যা ছাড়াই সম্পন্ন হয়েছে, বা একটি প্রাসঙ্গিক ত্রুটির সাথে ফিরে এসেছে তা নিশ্চিত করার জন্য প্রয়োজনীয় প্রক্রিয়া সরবরাহ করে।

এই বিষয়ের আরও বিস্তৃত ব্যাখ্যার জন্য, লেনদেন দেখুন।

শুরু হচ্ছে

আপনার প্রথম স্যান্ডবক্সড API প্রকল্প সেট আপ করতে আমাদের শুরু করা পৃষ্ঠা পড়ুন।

,

স্যান্ডবক্সড API (SAPI) সুপ্রতিষ্ঠিত স্যান্ডবক্স2 প্রকল্পের উপরে তৈরি করে। এই পৃষ্ঠাটি SAPI এর ডিজাইন আর্কিটেকচার এবং মূল ধারণাগুলি ব্যাখ্যা করে।

ওভারভিউ

SAPI ডেভেলপারদেরকে স্যান্ডবক্সিং-এর জন্য C/C++ লাইব্রেরি প্রস্তুত করার জন্য, সেইসাথে C/C++ লাইব্রেরির স্যান্ডবক্সযুক্ত সংস্করণের সাথে যোগাযোগের জন্য প্রয়োজনীয় API-এর জন্য টুল সরবরাহ করার জন্য ডিজাইন করা হয়েছে।

এই চিত্রটি একটি SAPI স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরির আর্কিটেকচার দেখায়:

SAPI ডায়াগ্রাম

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

অবশেষে, একটি উচ্চ-স্তরের লেনদেন API SAPI লাইব্রেরিগুলি পর্যবেক্ষণ করতে সক্ষম করে, এবং যদি তারা ব্যর্থ হয় (উদাহরণস্বরূপ, নিরাপত্তা লঙ্ঘন, ক্র্যাশ, বা সংস্থান ক্লান্তির কারণে) তাদের পুনরায় চালু করে।

স্যান্ডবক্স2

ওপেন-সোর্স প্রজেক্ট স্যান্ডবক্স২ গুগল সিকিউরিটি ইঞ্জিনিয়ারদের দ্বারা তৈরি এবং রক্ষণাবেক্ষণ করা হয়েছে এবং এটি SAPI দ্বারা ব্যবহৃত মূল স্যান্ডবক্সিং প্রযুক্তি। স্যান্ডবক্স2-এ তিনটি প্রধান উপাদান রয়েছে, স্যান্ডবক্স নীতি , নির্বাহক এবং স্যান্ডবক্সী

স্যান্ডবক্স নীতি

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

SAPI একটি ডিফল্ট নীতি ব্যবহার করে, বিকল্পভাবে আপনি একটি ডেডিকেটেড স্যান্ডবক্স নীতি ব্যবহার করতে পারেন এটিকে একটি sandbox.h হেডার ফাইলে সংজ্ঞায়িত করে এবং এটিকে sapi_library বিল্ড নিয়মে একটি আর্গুমেন্ট হিসেবে পাস করে।

স্যান্ডবক্সযুক্ত লাইব্রেরি

এটি স্যান্ডবক্সযুক্ত C/C++ লাইব্রেরি যা স্যান্ডবক্স2 দ্বারা প্রদত্ত সীমাবদ্ধ স্যান্ডবক্স পরিবেশে কার্যকর করা হবে। শেষ পর্যন্ত, স্যান্ডবক্সড লাইব্রেরি প্রয়োজনীয় কার্যকারিতা প্রকাশ করে যা হোস্ট কোড দ্বারা ব্যবহার করা যেতে পারে।

স্যান্ডবক্সড লাইব্রেরিটি sapi_library বিল্ড নিয়মের সাথে তৈরি করা হয়েছে, যেখানে আপনি একটি কাস্টমাইজড স্যান্ডবক্স নীতি নির্দিষ্ট করতে পারেন যা সীমাবদ্ধ কার্যকর পরিবেশকে সংজ্ঞায়িত করে। লাইব্রেরির উপর নির্ভর করে, আপনাকে র‍্যাপার বা স্টাব কোড লিখতে হতে পারে ( libcurl দেখুন), কিন্তু SAPI সংস্করণ প্রস্তুত করার সময় আপনি C/C++ লাইব্রেরির সোর্স কোড পরিবর্তন করবেন বলে আশা করা হচ্ছে না।

SAPI অবজেক্ট এবং RPC স্টাব

SAPI অবজেক্ট হল একটি C++ অবজেক্ট যা স্যান্ডবক্সড লাইব্রেরির API প্রকাশ করে। এটি হোস্ট কোড থেকে RPC স্টাব-এ কল ফরওয়ার্ড করে, যা স্যান্ডবক্সড লাইব্রেরির সাথে SAPI লাইব্রেরিতে এমবেড করা আছে।

এই দুটি উপাদান স্বয়ংক্রিয়ভাবে sapi_library() বিল্ড নিয়ম ব্যবহার করে বিল্ড সিস্টেম দ্বারা তৈরি হয়। SAPI দুটি বিল্ড সিস্টেম সমর্থন করে, Google এর Bazel এবং CMake

হোস্ট কোড

হোস্ট কোড হল যা SAPI লাইব্রেরি দ্বারা প্রদত্ত যুক্তি প্রয়োগ করে। এটি অন্যথায় C/C++ লাইব্রেরির আনস্যান্ডবক্সড সংস্করণ ব্যবহার করবে। যেমন, হোস্ট কোড SAPI লাইব্রেরি দ্বারা রপ্তানি করা ফাংশনগুলিকে কল করে, স্যান্ডবক্সে ডেটা পাঠায় এবং ডেটা গ্রহণ করে।

হোস্ট কোড SAPI লাইব্রেরি ব্যবহার করার জন্য অভিযোজিত করা প্রয়োজন। সবচেয়ে উল্লেখযোগ্যভাবে, লাইব্রেরির ফাংশনগুলিকে কল করা সম্ভব নয় কারণ লাইব্রেরিটি একটি পৃথক স্যান্ডবক্সড প্রক্রিয়ায় থাকে৷ অতএব, SAPI এমন সরঞ্জাম সরবরাহ করে যা একটি SAPI অবজেক্ট তৈরি করে যা একটি SAPI লাইব্রেরিতে প্রক্সি কল করে।

ধারণা

Bazel বিল্ড নিয়ম

SAPI প্রকল্প একটি C/C++ লাইব্রেরি স্যান্ডবক্সিং করার জন্য দুটি বেজেল বিল্ড নিয়ম প্রদান করে:

  • sapi_library() - C/C++ লাইব্রেরি স্যান্ডবক্স2 স্যান্ডবক্সী হিসাবে স্যান্ডবক্স করার জন্য প্রয়োজনীয় সমস্ত আউটপুট তৈরি করে। হোস্ট কোড বাইনারি তৈরি করতে ব্যবহৃত cc_binary() নিয়মের নির্ভরতা হিসাবে বিল্ড আউটপুট ব্যবহার করা যেতে পারে।
  • sapi_interface() - স্বয়ংক্রিয়ভাবে হেডার তৈরি করে যা হোস্ট কোড বাইনারিতে অন্তর্ভুক্ত করা যেতে পারে।

বিল্ড বিধিগুলির আরও বিস্তৃত ব্যাখ্যার জন্য, বিল্ড নিয়ম দেখুন।

ভেরিয়েবল

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

এই বিষয়ের আরও বিস্তৃত ব্যাখ্যা এবং কিছু সাধারণভাবে ব্যবহৃত SAPI প্রকারের একটি সংক্ষিপ্ত বিবরণের জন্য, ভেরিয়েবল দেখুন।

লেনদেন

উপরে ব্যাখ্যা করা হয়েছে, একটি স্যান্ডবক্সড লাইব্রেরিতে যেকোন API কল একটি RPC স্তরের উপর দিয়ে যায়। এই স্তরে একটি ব্যর্থতা পরিচালনা করতে সক্ষম হতে, আপনাকে যথাযথ ত্রুটি হ্যান্ডলিং বাস্তবায়ন করতে হবে। SAPI লেনদেন মডিউল একটি স্যান্ডবক্সড লাইব্রেরিতে সমস্ত কলগুলি কোনও RPC-স্তরের সমস্যা ছাড়াই সম্পন্ন হয়েছে, বা একটি প্রাসঙ্গিক ত্রুটির সাথে ফিরে এসেছে তা নিশ্চিত করার জন্য প্রয়োজনীয় প্রক্রিয়া সরবরাহ করে।

এই বিষয়ের আরও বিস্তৃত ব্যাখ্যার জন্য, লেনদেন দেখুন।

শুরু হচ্ছে

আপনার প্রথম স্যান্ডবক্সড API প্রকল্প সেট আপ করতে আমাদের শুরু করা পৃষ্ঠা পড়ুন।