استفاده از هسته سیستم عامل redoxکه با rust نوشته شده


#1

اول از همه میخواستم بدونم که redoxیک سیستم عامل کاملا اپن سورس است یا خیر بعد اگه اپن سورس است چطوری میتونم از هستش استفاده کنیم برای ساخت یه سیستم عامل جدید مثلا اندروید که هستش لینوکسه


#2

لایسنسش که MIT هست. پس اوپن سورسه. ولی به عنوان یه سیستم عامل مسلما یه عالمه نرم افزار داره که هرکدومشون لایسنس خودشو داره.
پلتفورمهایی که پشتیبانی میکنه خیلی کمتر از لینوکسه. (بر اساس ویکیپدیا فقط amd64)

یه سوالی که برام پیش اومده اینه که چرا؟!
به نظر من، لینوکس با داشتن monolitic kervel خیلی بهتر از سیستم عاملهای microkernel هست! کامیونیتی خیلی بزرگتری هم داره.

اگه دنبال استفاده از یه کرنل بجز لینوکس هستید، freebsd رو پیشنهاد میکنم.


#3

خیلی ممنون از راهنمای های شما من میخوام فقط از هسته redoxاستفاده کنم چون میخواهم کل سیستم عامل رو با rustتوسه بدم
و میشه در رابطه با microkernel بیشتر توضیح بدین و freebsd ممنون


#4

سیستم عاملی هم که قراره درست کنم بشتر مرتبط به اینترنت میشه مثل کروم اواس


#5

حدث میزدم اینطور باشه.
پیشنهاد میکنم اگه واقعا مزیتی توی این مساله نمیبینید و صرفا به خاطر Rust میخواید اینکار رو انجام بدید، بیخیالش بشید.
به جاش یاد گرفتن C و توسعه‌ی لینوکس رو پیشنهاد میکنم. برای شروع این تاپیک رو بخونید.

توی این زمینه‌ها تخصص ندارم. صرفا تعاریفش رو میدونم.

کرنل monolithic یه کرنل بزرگه که همه چیز داخل خودش هست. یه واسط کامل بین سخت افزار و نرم افزارهایی که کاربر باهاشون در ارتباطه (user space) با اینکه بزرگتره ولی معماری ساده‌تر (simple نر)ی داره.
فایل‌سیستم و درایورها و داخل خود کرنل هستن و انتظار میره این کرنل رو روی هر سخت افزاری که بذاریم، بشناستش.
با ماژول نویسی میشه کرنل رو گسترش داد و قابلیتها (و درایورهای) بیشتری بهش اضافه کرد.

با میکروکرنل تا حالا کار نکردم. ولی میدونم فایل‌سیستم و درایورها وapplication ipc خارج از کرنل هستن و به نوعی یه لایه‌ی مجزا ایجاد کردن بین کاربر و سخت‌افزار.

این تفاوتها‌ باعث میشه میکروکرنل راحتتر گسترش داده بشه (develop) ولی سرعت execute پایینتری داره. (چون لایه‌های بیشتری هست)
سرویسهایی که کاربر ایجاد میکنه و سرویسهای خود کرنل، در microkernel ها به صورت مجزا هستن ولی در monolithicها هیچ تفاوتی با هم ندارن. این باعث میشه سرویسهای monolithic قدرت بیشتری داشته باشن ولی اگه یه سرویس کرش کنه کل سیستم کرش میکنه در حالی که اگه یه سرویس توی microkernel کرش کنه، بقیه‌ی سیستم به کار خودش ادامه میده.

در کل بدیها و خوبیهای خودشونو دارن. یه چیزهایی مثل HAL فکر میکردم فقط مختص به monolithic باشن ولی مثل اینکه توی microkernel هم هست.
اینکه گفتم بهتره سراغ لینوکس برید به خاطر بزرگتر بودن کامیوتینیه که باعث میشه افراد بیشتری برای کمک به شما وجود داشته باشن.

و البته freebsd هم سیستم عامل خیلی خوبیه. ولی سازنده هاش اینقدر به امنیت فکر میکنن که وقت ندارن به چیز دیگه‌ای برسن.
امتحان کردنشو بهتون پیشنهاد میکنم و یه سری ویژگیهای معرکه داره (مثل jail) ولی هیچوقت فکر نمیکنم سیستم عامل اصلی من بشه.

اگه دنبال ادیت یه سیستم عامل کامل و تبدیلش به یه سیستم عامل برای کارهای خاص هستید، دبیان رو پیشنهاد میکنم. ادیت پذیری بالایی داره :smiley: و سیستم عاملهای زیادی از روش ساخته شده مشابه چیزی که شما میخواید (مثلا raspbian با محیط گرافیکی pixel)


#6

ببخشید میشه به ایدی تلگرام من پیام بدین abdiayazایدی من


#7

یعنی شما میگین cاز rustبهتره و دوم این که من می خوام این سیستم عامل بیشترش انلاین باشه و یه جا هم خوندم که redoxبا urlها کار میکنه


#8

نه. امکانش نیست.

نه. همچین حرفی نزدم. تا حالا با rust کار نکردم.
من میگم لینوکس از redox بهتره. منطقم هم ربطی به زبان برنامه نویسی یا پرفورمنس نداره. دلایل دیگه‌ای دارم که گفتم.

متوجه منظورتون نمیشم.


#9

زبان c یه زبان مادر هست که در زیر ساخت و پیاده سازی دنیای نرم افزار و شبکه بسیار سهم بزرگی داره که بیس و پایه پیاده سازی بیشتر زبان های برنامه نویسی هم هست از جمله همین زبان rust و دلیل ایجاد زبان rust این بود که اومدن تو این زبان امنیت رو بالا بردن ( امنیت و مدیریت حافظه ) و همچنین برنامه نویسی فانکشنال به صورت همزمانی (Concurrency) ضمن اینکه زبان شی گرا (oop) و امری (imperative) هم هست این زبان رو به یه انتخاب فوق العاده برای پلت فرم ها و منظورهای سیستمی تبدیل کرده و حتی میشه در پلت فرم های دیگه مثل وب تحت فریم ورک (iron) ، بازیسازی و … ازش بهره برد شخصا خودم مدتی روش کار کردم نسبت به زبان های دیگه در بحث برنامه نویسیش دشواری هایی داره و مفاهیم گسترده ای هم داره مخصوص بحث مدیریت حافظش خیلی جالبه که باعث می شه برنامه هایی کهاز طریق این زبان پیاده سازی میشه امنیت بالایی داشته و باشه و یکی از بزرگترین اهداف پروژه redox هم همین بود که بیان تقریبا هسته لینوکس رو دوباره نویسی کنن و امنیتش رو به خاطر ویژگی این زبان بالا ببرن


#10

در مورد ownership در راست هم مطالعه کردین؟ اگر نکردین حتما براتون جالبه


#11

لینوکس و redox قابل مقایسه نیستند چون redox یک مایکرو کرنل و فقط در حد یک پروژه ابتداییه. پس نمیشه گفت کی بهتره چون برای منظور متفاوتی ساخه شدند، درضمن من اصلا توسعه آنچنان فعالی توی ریپوی redox نمیبینم


#12

به سر‌انجام نرسیدن توی پروژه‌های مربوط به سیستم عاملها چیز خیلی طبیعیه. الآن ۲۰ساله برنامه‌نویسهای gnu دارن روی hurd کار میکنن و هنوز به ورژن پایدار نرسیدن. ()
اصلا به این نکته توجه نکرده بودم و همش فکر میکردم redox یه پروژه‌ی کامل و پایداره.

تا حالا با rust کار نکردم ولی ازش خوشم میاد. احتمالا در آینده‌ برم سراغش. بعد از کلوژر.
«صحیح برنامه نویسی» رو به آدم یاد میده. (احتمالا مثل کلوژر)


#13

اینکه به سرانجام رسیدن یا نه فقط یه حدسه که که شک دارم درست باشه, redox یه حدف اصلی کاملا تحقیقاتی داشت که انگار انجام شد, حالا احتمالا به عنوان طرح توجیهی (proof of concept) خیلی ها قرار بگیره, ممکنه خود redox هم توسعه پیدا بکنه اما واقعا دیگه زیاد مهم نیست.


#14

کلوژر در زمان کمپایل به اندازه rust به شما کمک نمیکنه و موضوع راست و‌کلوژر کاملا از هم جداست، خیلی از مشکلاتی که در زبان های برنامه نویسی وجود داره اصلا در کلوژر وجود ندارند که البته بدلیل محدودیت های این نوع زبان هاست. منظورم از محدودیت اشاره به ضعف های این نوع زبان ها نیست، گاهی داشتن محدودیت خیلی هم‌خوبه


#15

با rust کار نکردم.
ولی دارم با کلوژر روش صحیح کد زدن رو یاد میگیرم. منظورم این بود.
یکی دوتا پروژه تو کلوژر بزنم میرم سراغ rust و یه کم باهاش دوست میشم.


#16

کلا برنامه نویسی فانکشنال کمک خیلی زیادی به درست فکر کردن در مورد مشکلی که در حال حل کردنش هستید میکنه.


#17

من از اولش هم از oop بدم میومد.
همیشه هر جا بتونم از کلاس و تابع دور میشم. ولی یه جاهایی مجبور بودم (سیستمهای ORM مثل SqlAlchemy)
چرا باید ۷خط کد بزنیم تا یه helloworld بنویسیم؟ یه کم با عقل جور در نمیاد. (اشاره به زبانهایی که فقط oop هستن)


#18

با یک خط هم میشه🤗

puts 'hello word'

#19

ببینید دوست عزیز این الگوهای برنامه نویسی مثل imperative , oop , pure functional تحت زبان های مختلف بستگی به نوع پلت فرم و پروژه ای که شما برای پیاده سازی انتخاب می کنید داره مثلا تو بحث مهندسی نرم افزار و پیاده سازی پروژه های تجاری از نظر مباحث تجزیه و تحلیل سیستم oop خیلی کاربردیه چون مفاهیم و ابزارهایی که در بحث تجزیه و تحلیل سیستم ها ارایه شده بیشتر بر پایه همین oop هست به خاطر ویژگی هایی که مفاهیم شی گرایی داره به صورت گروهی و شرکتی و بر اساس خروجی تحلیلی یه پروژه رو راحت می شه به صورت گروهی پیاده سازی و توسعه داد اما همین قضیه تو بحث برنامه نویسی pure functional خیلی پیچیده میشه و خوانایی کد خیلی پایین می یاد و یکی از پیچیدگی های این روال کد نویسی با زبان های pure funational به صورت گروهی کار کردنه از این روش برنامه نویسی و Concurrency بیشتر برای مباحث سرور و حجم بالای کانکشن ها و ریکوست ها روی سرور تو پلت فرم وب بیشتر استفاده می کنن که فوق العاده کارآمد هست بنابراین به نظرم اول انتخاب کنید که در آینده روی چه پلت فرمی کار خواهید کرد و نیازمندی های اون پلت فرم در سکشن های مختلف برای شما چی خواهد بود هر چند همین الگوی های برنامه نویسی رو هم می تونید به ترتیب یاد بگیرید مثلا از برنامه نویسی imperative تحت زبان c شروع کنید بعد برید سراغ oop تحت زبانی مثل ++c و در آخر هم سراغ زبان های pure functional یا زبان هایی که hybrid هستن برید


#20

این بحثها از موضوع تاپیک خارجه و بهتره ادامه پیدا نکنه. یا به یه تاپیک دیگه منتقل بشه.
فقط میتونم اینو بگم که به نظر من OOP یکی از اشتباهات بشر بود و هیچ‌جایی هیچ کاری رو راحت نمیکنه.
هر مشکلی که توسط کامپیوتر حل میشه، به طور کامل به منطق ریاضی ربط داره. نه به اشیای دنیای واقعی. وقتی ما OOP کد میزنیم، باید همه چیز رو به صورت یک شی تعریف کنیم و براش ویژگی و قابلیت در نظر بگیریم. در حالی که واقعا هیچ‌جا نیازی به اینکار نیست و باعث میشه پروژمون از simple بودن در بیاد.
نمیدونم منظور شما از تجزیه‌تحلیل سیستم چیه. ولی اگه همون چیزی باشه که من بهش فکر میکنم، OOP فقط کار رو پیچیده تر میکنه.
یه زمانی ترند بود. هر شرکتی که با oop کد میزد خفن بود. هر برنامه نویسی که oop کار میکرد خفن بود.
ولی الآن همه‌ی اون شرکتهای بزرگ برگشتن سمت pf.

من با C++ برنامه نویسی رو شروع کردم. از همون موقع هم از oop بدم میومد.
الآن هم فقط وقتی دارم از یه لایبرری استفاده میکنم که با oop نوشته شده، مجبورم ازش استفاده کنم که در اون صورت هم در حد امکان فاصلم رو ازش حفظ میکنم.

درمورد پردازشهای موازی و همزمان که oop مارو به زمان انسانهای اولیه میبره.
درمورد چیزهای دیگه، نه صرفا pure function. تقریبا هر چیز دیگه‌ای simpleتر از oop میشه.