আপগ্রেড করার সময় ওপেন সোর্স সফটওয়্যার প্যাচিং কোনও বিকল্প নয়?


13

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

মাঝে মাঝে আপনার কোনও নির্দিষ্ট মডিউলের ব্যয়বহুল চুল্লী এড়াতে বাগ ফিক্সের প্রয়োজন হয়, তবে প্রযুক্তিগত এবং / বা রাজনৈতিক কারণে আপনি সর্বশেষ প্রকাশে আপগ্রেড করতে পারবেন না।

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

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

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

এই ক্ষেত্রে উপরেরটি করা কি খারাপ ধারণা হবে? যদি তা হয় তবে ওপেন সোর্স পরিবর্তনের প্রয়োজন হলে সেই আদর্শ পরিস্থিতিটি কী, তবে কেবল আপনার বাড়ির সুবিধার জন্য?


1
আপনি যদি মনে করেন প্রশ্নটি গঠনমূলক নয় বা উন্নত হতে পারে তবে দয়া করে আমাকে জানান।
maple_shaft

আপনি যদি আপনার সফ্টওয়্যারটিতে সংহত সরঞ্জামটি আপডেট করতে না পারেন তবে আপনি যা করতে পারেন তা হ'ল সরঞ্জামটি প্যাচ করা উচিত যাতে বাগটি ঠিক হয়ে যায়। কেবলমাত্র সরঞ্জামটি আপডেট না করা তার পক্ষে গুরুত্বপূর্ণ যদি এর অর্থ আপনার নিজের কোডটিকে পুনরায় ব্যবহার করা হয়।
রামহাউন্ড

উত্তর:


12

আপনি যদি কোনও পরবর্তী সংস্করণ ব্যবহার করতে না পারেন যার মুখোমুখি সমস্যা না ঘটে তবে আপনার কাছে কেবলমাত্র বিকল্প রয়েছে

  • সমস্যাটি নিয়ে বেঁচে থাকুন এবং এক সন্ধান করুন
  • লাইব্রেরিটি কাঁটাচামচ করুন এবং এটি আপনার ব্যক্তিগত সংস্করণে ঠিক করুন (যা আপনি কার্যকরভাবে করতে চাইছেন)
  • তোয়ালে নিক্ষেপ করুন এবং আপনার পরিচালকদের বলুন যে সমস্যাটি দুর্ঘটনাযোগ্য (যা আপনার কাছে দু'টি বিকল্প খোলা আছে বলে একটি মিথ্যা কথা হবে)।


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


মজাদার! ডিক্লুপিংয়ে সহায়তা করার জন্য আমি কখনই লাইব্রেরি মোড়ানোর সম্ভাবনা বিবেচনা করি নি। আপনার ইনপুট জন্য ধন্যবাদ!
maple_shaft

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

1
@ ব্লফল হ্যাঁ, এ কারণেই এটি হালকাভাবে নেওয়া কোনও পদক্ষেপ নয়। তবে কমপক্ষে একটি ক্ষেত্রে আমাদের কাছে একটি তৃতীয় পক্ষের (ওএসএস) গ্রন্থাগার এর সমস্ত প্যাকেজ এবং ক্লাসের নামগুলি 2 টি ছোট প্রকাশের মধ্যে পরিবর্তিত হয়েছিল এবং এটি গ্রহণ করা ছাড়া কোনও উপায় ছিল না, সুতরাং রিফ্যাক্টরিংটি যাইহোক সম্পন্ন করতে হয়েছিল। এইভাবে, আমরা ভবিষ্যতের প্রমাণের পাশাপাশি সমস্যাটি স্থির করে দিয়েছি যাতে নতুন সংস্করণটি ব্যবহারের প্রয়োজন হয়েছিল।
উঠছে

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

2
নোট করুন যে কিছু লিনাক্স ডিস্ট্রিবিউশনগুলি পূর্ববর্তী রিলিজগুলিতে সুরক্ষা প্যাচগুলি ব্যাকপোর্ট করে কার্যকরভাবে তাদের নিজস্ব "কাঁটাচামচ" রক্ষণাবেক্ষণ করে।
লাইওরি

6

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

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


3

যতক্ষণ না প্রত্যেকে ব্যয়, সুবিধা এবং ঝুঁকি নিয়ে পেট করতে পারে সেখানে আসলেই কোনও খারাপ কাজ নেই।

... ঠিকঠাকটি যথেষ্ট সহজ মনে হচ্ছে ... কোডটি প্যাচ করার জন্য

আপনার যখন কাজ করার দরকার হয় তখন নিখুঁত (তৃতীয় পক্ষের লাইব্রেরিটি হ'ল যা আপনি চান ঠিক তাই করা) যথেষ্ট পরিমাণে শত্রু yourself আমি বেশ কয়েকটি প্রকল্প করেছি যেখানে আমরা বাণিজ্যিক লাইব্রেরির জন্য সোর্স লাইসেন্স কিনেছি যাতে বিক্রেতার কাছে যাওয়ার আগে আমরা সমস্যাগুলি সমাধান করতে পারি।

... প্রতিবন্ধকরা এই ক্ষেত্রে তর্ক করতে চান যে এটি প্রায়শই একটি খারাপ ধারণা যে এটি ঝুঁকিপূর্ণ এবং একটি ঝামেলা জটিলতার পরিচয় দেয়।

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

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

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

আপনি যদি কোনও প্যাচ করছেন, প্যাচটি আপনার নিজস্ব কোডের একটি অংশ, যার অর্থ এটি আপনাকে আপনার প্রক্রিয়ার অংশ হিসাবে তৈরি করতে হবে। এটি আপনার সিস্টেমে আপনার কোডটি 100% যুক্ত করার চেয়ে আলাদা নয়। তৃতীয় পক্ষের বিতরণটিকে স্যাক্রোস্যানেক্ট হিসাবে বিবেচনা করুন এবং এটিকে উত্স কোডের মতো মডিউলে রাখুন। আপনার লেখা কোনও প্যাচগুলি এটির সাথে পৃথক ফাইলে সংরক্ষণ করা হয় এবং বিল্ড প্রক্রিয়াটির অংশ হিসাবে প্রয়োগ করা হয়। আপনি সর্বদা নির্গত উত্স থেকে পরিষ্কার উত্স থেকে প্যাচড উত্সে যান এবং ঠিক কী চলছে তা দেখাতে পারেন। (কিছু লোক আনপ্যাক, হ্যান্ড-প্যাচ, রি-প্যাক এবং সংস্করণ নিয়ন্ত্রণে এটি সংরক্ষণ করে That's এটি খারাপ))

... আমরা তাদের সোর্স কন্ট্রোল রিপোজিটরি থেকে তাদের কোডটি আমাদের মধ্যে টানবো এবং আমরা কোনও কোড পরিবর্তনের পিছনে ইতিহাস হারাব ...

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

এছাড়াও এটি এমন কিছুর মতো মনে হয় যা এত ছোট কোড পরিবর্তনের জন্য খুব জটিল that

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


2

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

যদি প্রশ্নে ওপেন সোর্স প্রকল্প এটির অনুমতি দেয় তবে আপনার ব্যাক-পোর্টড বাগফিক্সকে তাদের সংগ্রহস্থলে অবদান রাখুন। এটি হ'ল আপনি যদি 1.5.2 সংস্করণ ব্যবহার করেন এবং বর্তমান স্থিতিশীল সংস্করণটি 1.6.1 হয় তবে 1.5% তে একটি প্যাচ অবদান রাখুন। যদি এটি গৃহীত হয়, আপনি সরাসরি সংগ্রহস্থল থেকে স্থির উত্সটি আনতে পারেন (সম্ভবত সংস্করণ 1.5.3) এবং সবাইকে খুশি করতে পারেন।

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

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