اول از همه باید بدونیم که این دو شخص چه کسانی هستن
۱. developer (توسعهدهنده): توسعه دهنده اصلی نرمافزار
۲. maintainer (نگهدارنده): کسی که packaging (بستهبندی) رو برای یه توزیع خاص (اینجا مثلا دبیان) انجام میده و دسترسی مستقیم به مخزن دبیان برای آپلود کردن داره.
اگه این دو مورد بالا یکی باشن، یعنی توسعه دهندهی یه نرمافزار مستقیم به مخزنهای دبیان دسترسی داشته باشه، این مورد از لحاظ امنیتی توصیه نمیشه، ولی اگه دو نفر متفاوت باشن، اگر کسی بخواد توی مخزنهای دبیان خرابکاری کنه، یک پله کارش سختتر میشه (البته غیرممکن نیست ولی سختتر میشه). یعنی نیاز به دو نفر هست، نفر اول که سورس کد نرمافزار رو تغییر بده و نفر دوم که کار بسته بندی رو انجام میده. این در صورتی هست که بخواد توی سورس کد دستکاری انجام بده و بفرسته روی مخزن دبیان.
یک مورد دیگه هم هست، به طور مثال، فرض کن که من هم developer و هم maintainer یک بسته خاص هستم، میام نسخهی اول و دوم و سوم نرمافزار رو بدون هیچ مشکلی آپلود میکنم توی مخزنهای دبیان ولی سپس از نسخه چهارم تصمیم میگیرم که نرمافزارم رو با یه کامپایلر که که در هنگام کامپایل کردن، یک سری کدهای اضافه قاطیش میکنه، کامپایل کنم و سپس نرمافزار رو آپلود کنم توی مخزنهای دبیان، اینجوری یک نفر میتونه راحتتر این کار رو انجام بده تا این که دو نفر نیاز باشه.
به صورت کلی برای این که این مشکل رفع بشه، دبیان یک سیستمی رو در حال پیگیری هست به اسم reproducible builds (ساختهای قابل بازتولید) که این وبگاهش هست (
https://reproducible-builds.org) که یک سری راهنماییهایی داره، مثلا میگه که توی artifact تولید شده توسط build system نباید زمان build به عنوان یه variable (متغییر) وجود داشته باشه، تا تغییر در binary تولید شده فقط وابسته به دو تا چیز باشه ۱. تغییر در سورس کد ۲.تغییر در build environment (محیط توسعه، مثل نسخه کامپایلر استفاده شده)، اینجوری میشه اطمینان بیشتری نسبت به نسخههای باینری تولید شده داشت.