إذا بحثت عن أي دليل للبنية كشيفرة Infrastructure as Code فسوف تجد اسم Terraform في كل مكان، ثم تجد بجانبه منذ 2023 اسماً آخر هو OpenTofu، والأمر في الاثنين واحد تقريباً، فالملفات نفسها بلغة HCL، والمزودات Providers نفسها، والأوامر نفسها مع تغيير terraform إلى tofu، فيسأل المبتدئ: لماذا يوجد مشروعان؟ وأيهما أتعلم؟ وهل استخدام Terraform في شركتي مسموح؟ والإجابة على هذه الأسئلة الثلاثة في قصة تغيير ترخيص واحدة بدأت في أغسطس 2023، ولم تنته بعد.
وقد ذكرنا هذه القصة باختصار في مقال الرخص مفتوحة المصدر كمثال على الرخص التي تتغير، وفتحنا هناك ملف رخصة Terraform لنرى صاحبها وتاريخ تغييرها، فلن نعيد شرح الفرق بين الرخص هنا، وإنما نتعمق في هذه القصة بالذات لأنها تخصك مباشرة إذا كنت سوف تكتب بنيتك في ملفات، وهذا هو المقال الثاني في مرحلة البنية كشيفرة IaC والأتمتة بعد مصطلحات IaC للمبتدئين الذي شرح معنى State وPlan وDrift، وسوف نناقش في هذا المقال ما يلي:
- القصة بالتواريخ: من Terraform 0.1 برخصة MPL إلى BUSL، ثم بيان OpenTF والنسخة البديلة Fork، ثم OpenTofu في Linux Foundation وCNCF، ثم شراء IBM لشركة HashiCorp.
- ماذا يقول نص رخصة BUSL في Terraform حرفياً، وما الذي تسمح به وما الذي تمنعه.
- أين يتطابق المشروعان اليوم وأين يختلفان، ومنها تشفير ملف الحالة State Encryption وسجل المزودات Registry.
- كيف تنتقل من Terraform إلى OpenTofu، وكيف تختار بينهما.
Terraform قبل القصة
أصدرت HashiCorp أول نسخة من Terraform، وهي 0.1، في 28 يوليو 2014 كما في وسم الإصدار في مستودعه، وكانت برخصة Mozilla Public License 2.0، واختصاراً MPL 2.0، وهي رخصة مفتوحة من نوع Copyleft الضعيفة Weak Copyleft التي شرحناها في مقال الرخص. ووخلال تسع سنوات أصبح Terraform من أشهر أدوات تجهيز البنية Provisioning، وبنيت حوله منظومة كاملة: مزودات لكل سحابة وخدمة تقريباً، وشركات تبيع منصات لتشغيله للفرق مثل Spacelift وenv0 وScalr، وآلاف الوحدات Modules الجاهزة. وهذه المنظومة هي التي جعلت تغيير الرخصة قضية كبيرة، فالأمر لم يعد يخص شركة واحدة وإنما يخص كل من بنى عملاً على الأداة.
القصة بالتواريخ
الصورة التالية تبين الأحداث الرئيسية من أول إصدار حتى اليوم، ثم نشرح كل حدث بمصدره:

10 أغسطس 2023: HashiCorp تنتقل إلى BUSL
في هذا اليوم كتب Armon Dadgar، الشريك المؤسس والمدير التقني في HashiCorp، إعلان انتقال الشركة إلى Business Source License 1.1، واختصاراً BUSL أو BSL، لكل الإصدارات القادمة من منتجاتها، ومنها Terraform وPacker وVault وConsul وNomad وBoundary. وذكر الإعلان أن المستخدمين يستطيعون نسخ الكود وتعديله وإعادة توزيعه للاستخدام التجاري وغير التجاري، إلا إذا كانوا يقدمون منتجاً منافساً لـ HashiCorp، وأن واجهات HashiCorp البرمجية APIs وحزم التطوير SDKs وأغلب المكتبات الأخرى تبقى برخصة MPL 2.0. وأما السبب الذي ذكرته الشركة فهو أن شركات أخرى تستفيد من المشاريع المفتوحة وتبيعها دون أن تقدم مساهمات حقيقية في المقابل، وأن نموذج المصادر المفتوحة التجاري يجب أن يتطور حتى تستمر المنظومة.
وأول إصدار من Terraform بالرخصة الجديدة هو 1.6.0، وآخر إصدار برخصة MPL هو 1.5.7، وتستطيع أن تتأكد من ذلك بنفسك من ملف الرخصة في وسم كل إصدار، فملف LICENSE في الإصدار 1.5.7 يبدأ بـ Mozilla Public License، أما ملف الإصدار 1.6.0 فيبدأ بنص Business Source License.
بيان OpenTF ثم النسخة البديلة
بعد الإعلان بأيام نشرت مجموعة من الشركات التي تعتمد على Terraform، وأغلبها شركات تبيع منصات لتشغيله، بيان OpenTF الذي طلبت فيه من HashiCorp أن تعيد Terraform إلى رخصة مفتوحة حتى يبقى للمجتمع بيت واحد محايد، وذكرت أنها سوف تنشئ نسخة بديلة إذا لم يحدث ذلك. وفي 25 أغسطس 2023 أعلنت المجموعة النسخة البديلة، وذكرت أن أكثر من 100 شركة و10 مشاريع و400 شخص تعهدوا بالمساهمة بالوقت والموارد خلال أسبوعين من نشر البيان، وأن هدفها أن يصبح المشروع في Linux Foundation ثم في Cloud Native Computing Foundation، واختصاراً CNCF. ثم فتح المستودع للجميع في 5 سبتمبر 2023.
20 سبتمبر 2023: OpenTofu في Linux Foundation
في هذا اليوم أعلنت Linux Foundation تأسيس OpenTofu، وذكر الإعلان أن اسمه السابق كان OpenTF، وأنه يبقى برخصة MPL 2.0 التي صدر بها Terraform في الأصل، وأن المشروع حصل على تعهدات رسمية من أكثر من 140 منظمة و600 شخص، وأنه يبدأ بالتزام 18 مطوراً متفرغاً على الأقل لمدة خمس سنوات على الأقل. ثم صدر أول إصدار مستقر OpenTofu 1.6.0 في 10 يناير 2024. ويدير المشروع لجنة توجيه تقنية Technical Steering Committee، واختصاراً TSC، بحسب ملف الحوكمة الذي يذكر أن العضو الجديد يرشحه عضو حالي ويضاف بأغلبية الثلثين، وأن اللجنة تجتمع كل أسبوعين في اجتماعات مفتوحة وتنشر قراراتها في المستودع، ويحدد ميثاق المشروع سقفاً لقوة التصويت، فإذا كان أكثر من عضوين من موظفي شركة واحدة أو مجموعة شركات مرتبطة، في لجنة من خمسة أعضاء أو أكثر، فأصواتهم مجتمعة لا تتجاوز صوتين، حتى لا تسيطر شركة واحدة على القرار. وفي 23 أبريل 2025 قبل المشروع في CNCF بمستوى Sandbox، وهو مستوى المشاريع الجديدة في المؤسسة.
أبريل 2024: رسالة HashiCorp ورد OpenTofu
في أبريل 2024 أرسلت HashiCorp رسالة تطالب بالتوقف Cease and Desist إلى مشروع OpenTofu، تتهم فيها أحد مطوريه بنسخ كود من Terraform المرخص بـ BUSL في تنفيذ الكتلة removed، ونشر OpenTofu رده في 11 أبريل 2024 ورفض الاتهام، وقال إن تحليله لأصل الكود بين أن الجزء المقصود جاء من كود أقدم برخصة MPL 2.0، وإن HashiCorp نفسها استخدمته في تنفيذها، ونشر رده الرسمي وتحليل أصل الكود. وهذه رواية OpenTofu كما نشرها مع وثائقه. وما يهمك أنت من هذه الحادثة شيء واحد: المشروعان أصبحا متنافسين فعلاً، وكل ميزة جديدة في أحدهما تكتب اليوم بحذر حتى لا تقترب من كود الآخر.
IBM تشتري HashiCorp
في 24 أبريل 2024 أعلنت IBM أنها سوف تشتري HashiCorp بسعر 35 دولاراً نقداً للسهم وبقيمة 6.4 مليار دولار للشركة، وأتمت الصفقة في 27 فبراير 2025. وتغيرت بعدها جهة الترخيص في ملف الرخصة من HashiCorp إلى IBM، ولكن الرخصة نفسها بقيت BUSL حتى كتابة هذا المقال، فالذي تغير هو المالك وليس الشروط. وقد يتساءل البعض: هل عاد Terraform مفتوح المصدر بعد الشراء؟ والإجابة لا، وملف LICENSE في الفرع الرئيسي هو الدليل كما سنرى في القسم التالي.
ماذا يقول نص الرخصة حرفياً؟
رخصة BUSL 1.1 نفسها نص عام كتبته MariaDB، وتجده في صفحة الرخصة، وهي تسمح لك بنسخ الكود وتعديله وإنشاء أعمال مشتقة منه وإعادة توزيعه واستخدامه استخداماً غير إنتاجي Non-production Use، ثم يضيف صاحب كل مشروع فقرة اسمها الإذن الإضافي Additional Use Grant تحدد الاستخدام الإنتاجي المسموح، لذلك لا تفهم BUSL في أي مشروع إلا من هذه الفقرة. والأمر التالي يعرض فقرات المعاملات Parameters من ملف رخصة Terraform مباشرة:
curl -s https://raw.githubusercontent.com/hashicorp/terraform/main/LICENSE | sed -n '/^Licensed Work/,/^Change License/p'والمخرج سوف يكون كما يلي:
Licensed Work: Terraform Version 1.6.0 or later. The Licensed Work is (c) 2024
IBM Corp.
Additional Use Grant: You may make production use of the Licensed Work, provided
Your use does not include offering the Licensed Work to third
parties on a hosted or embedded basis in order to compete with
IBM Corp.'s paid version(s) of the Licensed Work. For purposes
of this license:
A "competitive offering" is a Product that is offered to third
parties on a paid basis, including through paid support
arrangements, that significantly overlaps with the capabilities
of IBM Corp.'s paid version(s) of the Licensed Work. If Your
Product is not a competitive offering when You first make it
generally available, it will not become a competitive offering
later due to IBM Corp. releasing a new version of the Licensed
Work with additional capabilities. In addition, Products that
are not provided on a paid basis are not competitive.
"Product" means software that is offered to end users to manage
in their own environments or offered as a service on a hosted
basis.
"Embedded" means including the source code or executable code
from the Licensed Work in a competitive offering. "Embedded"
also means packaging the competitive offering in such a way
that the Licensed Work must be accessed or downloaded for the
competitive offering to operate.
Hosting or using the Licensed Work(s) for internal purposes
within an organization is not considered a competitive
offering. IBM Corp. considers your organization to include all
of your affiliates under common control.
For binding interpretive guidance on using IBM Corp. products
under the Business Source License, please visit our FAQ.
(https://www.hashicorp.com/license-faq)
Change Date: Four years from the date the Licensed Work is published.
Change License: MPL 2.0في المخرج أعلاه لاحظ التالي:
- الرخصة تخص Terraform من الإصدار 1.6.0 وما بعده فقط، فالإصدارات حتى 1.5.7 تبقى برخصة MPL 2.0 كما صدرت، ولا يستطيع أحد أن يسحب رخصة أعطيت.
- الاستخدام الإنتاجي مسموح بشرط واحد: ألا تقدم Terraform لطرف ثالث بشكل مستضاف Hosted أو مضمن Embedded لتنافس النسخ المدفوعة من IBM.
- المنتج المنافس Competitive Offering هو منتج يقدم لطرف ثالث بمقابل مالي، ومنه الدعم المدفوع، ويتداخل بشكل كبير مع قدرات النسخ المدفوعة، والمنتج المجاني لا يعتبر منافساً بنص الرخصة.
- الاستضافة أو الاستخدام لأغراض داخلية في المنظمة ليس منافسة، والمنظمة تشمل كل الشركات التابعة لها تحت سيطرة واحدة.
- كل إصدار يتحول إلى MPL 2.0 بعد أربع سنوات من نشره، فالإصدار 1.6.0 الذي صدر في أكتوبر 2023 يصبح مفتوحاً في أكتوبر 2027، ولكن الإصدارات الجديدة تبقى دائماً متأخرة أربع سنوات عن المفتوح منها.
- التفسير الملزم بحسب النص نفسه في صفحة الأسئلة الشائعة عن الرخصة، فإذا كانت حالتك قريبة من الحد فارجع إليها وإلى مستشار قانوني قبل أن تبني عليها منتجاً.
والصورة التالية تلخص ما يسمح به هذا النص وما يمنعه:

وهذا يعني عملياً أنك إذا كنت مطوراً أو مدير أنظمة يستخدم Terraform لإنشاء سيرفرات شركته، أو جهة حكومية تدير بنيتها الداخلية به، فالرخصة لا تمنعك من شيء. وأما إذا كنت شركة تبيع منصة لتشغيل Terraform لعملائها، أو منتجاً مدفوعاً يحتاج Terraform ليعمل ويتداخل مع ما تبيعه IBM، فهنا يقع المنع، وهذا هو السبب في أن أغلب من وقعوا بيان OpenTF كانوا من هذا النوع بالذات. ولكن لاحظ أن الرخصة المفتوحة ليست أمراً قانونياً فقط، فحتى لو لم يمسك المنع اليوم، فمستقبل الأداة التي تبني عليها بنيتك كلها بيد شركة واحدة، وهذه هي نقطة الحوكمة التي نعود إليها في قسم الاختيار.
أين يتطابق المشروعان؟
بدأ OpenTofu من آخر كود Terraform برخصة MPL، أي من فرع 1.5، لذلك كان في البداية نسخة مطابقة تقريباً، وما زال يقول في إعلان الإصدار 1.7 إنه بديل مباشر Drop-in Replacement لـ Terraform 1.5 مع طرق انتقال سهلة من الإصدارات الأحدث. والصورة التالية تبين كيف انقسم الكود ثم سار كل مشروع في طريقه:

وما يشترك فيه الاثنان حتى اليوم كثير:
- اللغة: الملفات بامتداد
.tfبلغة HCL نفسها، ومكتبة HCL نفسها ما زالت برخصة MPL 2.0. - المزودات Providers: المزود برنامج مستقل يتواصل مع الأداة ببروتوكول واحد، وأغلب المزودات المشهورة مثل AWS وHetzner Cloud برخصة MPL 2.0 كما في ملفات رخصها، لذلك يعمل المزود نفسه مع الأداتين.
- ملف الحالة: الصيغة واحدة، ولذلك تقول خطوات الانتقال إنك تشغل
tofu planعلى الحالة نفسها فتتوقع ألا ترى تغييرات، بشرط ألا يكون الملف مشفراً بتشفير OpenTofu. - الأوامر:
initوplanوapplyوdestroyوimportبالأسماء والخيارات نفسها تقريباً.
ولكن لاحظ أن «تقريباً» هنا مهمة، فكل إصدار جديد يزيد المسافة، والملف الذي يستخدم ميزة موجودة في أحدهما فقط لن يعمل في الآخر. ولحل هذه المشكلة لمن يكتب وحدات Modules للمشروعين أضاف OpenTofu 1.8 الامتداد .tofu، فإذا وجد ملف main.tofu بجانب main.tf فإن OpenTofu يقرأ الأول ويتجاهل الثاني، وTerraform يقرأ الثاني فقط، فيكتب صاحب الوحدة ميزات OpenTofu في ملف لا يراه Terraform.
أين يختلفان؟
الجدول التالي يجمع أمثلة من سجل إصدارات كل مشروع، وليس قائمة كاملة بالفروق، والإصدار المكتوب هو الذي ظهرت فيه الميزة بحسب المصدر المرتبط:
| الميزة | OpenTofu | Terraform |
|---|---|---|
| تشفير ملف الحالة والخطة داخل الأداة | 1.7 (أبريل 2024) | لا يوجد في الأداة نفسها، والوثائق تنصح بخلفية Backend تشفر الحالة |
| القيم المؤقتة Ephemeral التي لا تحفظ في الحالة | 1.11 (ديسمبر 2025) | 1.10 (نوفمبر 2024) |
| الخصائص التي تكتب ولا تحفظ Write-only | 1.11 | 1.11 (فبراير 2025) |
| المتغيرات في مصدر الوحدة Module Source | 1.8 (يوليو 2024)، ومعها في إعداد ال Backend والتشفير | 1.15 (أبريل 2026) |
for_each على المزودات، والخيار -exclude | 1.9 (يناير 2025) | لم نجده في سجلات إصدارات Terraform حتى 1.16 |
| توزيع المزودات والوحدات عبر سجل OCI | 1.10 (يونيو 2025) | لم نجده في سجلات إصدارات Terraform حتى 1.16 |
| قفل الحالة في S3 دون DynamoDB | 1.10 | 1.10، ثم أعلن جاهزاً للاستخدام العام في 1.11 |
الوسيط enabled بدلاً من حيلة count | 1.11 | لم نجده في سجلات إصدارات Terraform حتى 1.16 |
Stacks وActions وأمر terraform query | لا يوجد | 1.13 و1.14، وStacks تنشر عبر منصة HCP Terraform |
وفي الجدول أعلاه لاحظ أن الأفكار تنتقل في الاتجاهين، فالمتغيرات في مصدر الوحدة ظهرت في OpenTofu قبل Terraform بسنتين تقريباً، والقيم المؤقتة ظهرت في Terraform قبل OpenTofu بسنة، ولكن الصيغة والتفاصيل قد تختلف بينهما حتى في الميزة الواحدة، لذلك لا تفترض أن الملف الذي يعمل في أحدهما بميزة جديدة سوف يعمل في الآخر، وإنما جربه بالخطة. وآخر إصدار مستقر عند كتابة هذا المقال هو OpenTofu 1.13.1 وTerraform 1.16.5، وكلاهما صدر في أول أكتوبر 2026.
سجل المزودات Registry
عندما تكتب في ملفك source = "hashicorp/aws" فهذا عنوان مختصر، والأداة تكمله بسجل افتراضي تسأله عن الإصدارات وروابط التنزيل، وTerraform يسأل registry.terraform.io وOpenTofu يسأل registry.opentofu.org. وقد شرح OpenTofu في مقال بناء سجله أن HashiCorp أغلقت سجل Terraform أمام البرامج التي ليست Terraform، فاحتاج المشروع إلى سجل مستقل، فبناه على إصدارات GitHub التي ينشرها أصحاب المزودات أنفسهم، فالمزود الذي تنزله الأداتان واحد في الغالب، والذي يختلف هو الفهرس. والصورة التالية تبين ذلك:

ولاحظ أن أصحاب المزودات يوقعون إصداراتهم، فوثائق نشر المزودات في سجل Terraform تشترط إصداراً على GitHub فيه ملف SHA256SUMS وتوقيعاً له بمفتاح GPG، وبعد التثبيت تكتب الأداتان بصمات ما نزلته في ملف القفل .terraform.lock.hcl، فاحفظ هذا الملف في Git كما تحفظ ملفات القفل للحزم، والسبب شرحناه في أمن سلسلة التوريد: المزود برنامج يعمل بصلاحيات حساباتك عند المزود السحابي، وأي تغيير غير متوقع فيه يجب أن يظهر في طلب دمج.
تشفير ملف الحالة في OpenTofu
شرحنا في مقال المصطلحات أن ملف الحالة يحتوي على أسرار بنص واضح، وأن الحل التقليدي هو حفظه في خلفية Backend تشفر الملفات على القرص، والمشكلة في هذا الحل أن التشفير هنا مسؤولية مكان الحفظ، فمن يملك صلاحية القراءة من ال Bucket يقرأ الأسرار، والنسخة التي تنزلها إلى جهازك لتصلح شيئاً بنص واضح. والحل الذي أضافه OpenTofu 1.7 هو أن تشفر الأداة نفسها الحالة والخطة قبل أن تحفظهما في أي مكان، والصورة التالية تبين الفرق:

والإعداد التالي هو المثال الذي تبدأ به وثائق تشفير الحالة كما هو، ويشتق المفتاح من عبارة مرور بخوارزمية PBKDF2 ثم يشفر بخوارزمية AES-GCM:
variable "passphrase" {
# Change passphrase to be at least 16 characters long:
default = "changeme!"
sensitive = true
}
terraform {
encryption {
## Step 1: Add the desired key provider:
key_provider "pbkdf2" "my_key_provider_name" {
passphrase = var.passphrase
}
## Step 2: Set up your encryption method:
method "aes_gcm" "my_method_name" {
keys = key_provider.pbkdf2.my_key_provider_name
}
state {
## Step 3: Link the desired encryption method:
method = method.aes_gcm.my_method_name
## Step 4: Run "tofu apply".
## Step 5: Consider adding the "enforced" option:
# enforced = true
}
## Step 6: Repeat steps 3-5 for plan{} if needed.
}
}في الإعداد أعلاه لاحظ التالي:
- القيمة الافتراضية
changeme!للتوضيح فقط، والوثائق نفسها تطلب عبارة طولها 16 حرفاً على الأقل، ولا تقم أبداً بكتابة العبارة في الملف، وإنما مررها من متغير بيئة أو من مدير أسرار، والسبب أن الملف في Git. - مزود المفتاح Key Provider يمكن أن يكون PBKDF2 من عبارة مرور، أو خدمة مفاتيح مثل AWS KMS وGCP KMS، أو OpenBao، كما يذكر إعلان الإصدار 1.7، ومنذ الإصدار 1.10 يمكن أيضاً كتابة مزود مفتاح خارجي خاص بك.
- المثال يشفر الحالة فقط، والخطوة السادسة في تعليقاته تطلب أن تكرر الشيء نفسه في كتلة
plan، فلا تنسها، لأن ملف الخطة المحفوظ بالخيار-outفيه أسرار أيضاً. - الخيار
enforced = trueفي الخطوة الخامسة يجعل الأداة ترفض أن تكتب الحالة بلا تشفير، فإذا حذف أحدهم الإعداد بالخطأ فشلت العملية بدلاً من أن تحفظ الأسرار بنص واضح. - إذا كانت عندك حالة قديمة غير مشفرة فالوثائق تشرح إضافة طريقة
unencryptedكخيار احتياطي Fallback مؤقت حتى ينقل أولtofu applyالحالة إلى الصيغة المشفرة، ثم تحذفه.
الانتقال من Terraform إلى OpenTofu
تصف خطوات الانتقال الرسمية العملية في ست خطوات، ونلخصها كما يلي:
- خذ نسخة احتياطية من الحالة: انسخ
terraform.tfstateونسخته الاحتياطية إذا كانت الحالة محلية، أو اتبع طريقة النسخ في الخلفية مثل تفعيل النسخ Versioning في S3، ثم احفظ كل التغييرات في Git ويفضل في فرع خاص بالانتقال. - ثبت OpenTofu من صفحة التثبيت وتأكد من الإصدار بالأمر
tofu --version. - شغل
tofu initلتنزيل المزودات من سجل OpenTofu وتهيئة الخلفية. - شغل
tofu plan، والمتوقع بحسب الوثائق أن ترى No changes أو الخطة نفسها التي كان Terraform سيعرضها. - شغل
tofu apply. - اختبر بتغيير صغير غير مهم، مثل إضافة وسم Tag إلى مورد، ثم plan وapply.
وإذا ظهرت مشكلة فخطة التراجع في الوثائق نفسها: توقف عن استخدام OpenTofu فوراً، واسترجع النسخة الاحتياطية، ثم شغل terraform init وterraform plan. ولاحظ أن الخطوة الرابعة هي الاختبار الحقيقي، فإذا عرضت الخطة استبدال أي مورد فلا تكمل، والسبب في الغالب ميزة من Terraform بعد 1.5 لا يعرفها OpenTofu بالصيغة نفسها، وإذا كانت عندك عدة مشاريع تقرأ حالة بعضها عبر terraform_remote_state فاقرأ صفحة الانتقال لعدة إعدادات مترابطة قبل أن تبدأ.
كيف تختار؟
لا توجد إجابة واحدة لكل الناس، ولكن توجد أسئلة واضحة تقودك إلى الإجابة:
- طريقة الاستخدام Usage: هل تستخدم الأداة لبنيتك الداخلية، أم تبني منتجاً مدفوعاً أو خدمة لعملاء حولها؟ في الحالة الثانية اقرأ الرخصة مع مستشار قانوني قبل أي شيء، وOpenTofu يزيل السؤال كله.
- المنصة التي تعمل عليها Platform: إذا كان فريقك يعتمد على HCP Terraform وميزاته مثل Stacks، فالانتقال يعني تغيير المنصة كلها، أما إذا كنت تشغل الأداة من خط CI/CD عندك، كما سوف نفعل في مقالات المرحلة، فالانتقال سهل.
- الحوكمة Governance: من يقرر مستقبل الأداة؟ في Terraform تقرر شركة واحدة هي IBM، وفي OpenTofu لجنة تقنية في مؤسسة محايدة، وقد شرحنا ما يعنيه كل نموذج في المشروع الذي تقوده شركة واحدة.
- الميزات التي تحتاجها Features: تشفير الحالة داخل الأداة موجود في OpenTofu فقط، وStacks وActions في Terraform فقط، فإذا كانت ميزة منها شرطاً عندك فقد اخترت.
- الدعم والتوظيف Support and Hiring: الشهادات الرسمية والدعم التجاري من الشركة المالكة موجودان في Terraform، أما المعرفة نفسها فتنتقل بين الأداتين كما هي، فمن يعرف أحدهما يعرف الآخر.
ونقاط القوة والضعف لكل أداة كما يلي:
| Terraform | OpenTofu | |
|---|---|---|
| نقاط القوة | شركة كبيرة تطوره وتدعمه تجارياً، ومنصة HCP Terraform وميزات Stacks وActions، وأغلب الدروس والأمثلة على الإنترنت مكتوبة له | رخصة MPL 2.0 مفتوحة دون شروط منافسة، وحوكمة في Linux Foundation وCNCF، وتشفير الحالة داخل الأداة، وسجل مستقل ودعم سجلات OCI |
| نقاط الضعف | رخصة BUSL تمنع المنافسة وتجعل مستقبل الشروط بيد IBM، وتشفير الحالة مسؤولية مكان الحفظ وحده | بعض ميزات Terraform الجديدة غير موجودة أو مختلفة الصيغة، والدعم التجاري من الشركات الداعمة وليس من جهة واحدة |
وفي مقالات هذه المرحلة سوف نستخدم OpenTofu، والسبب أن موقعنا يشرح الأدوات التي تستطيع أن تملكها وتشغلها دون شروط على طريقة استخدامها، ولكن كل ما سوف نكتبه من ملفات HCL وأوامر ينطبق على Terraform مع تغيير اسم الأمر، ما لم نستخدم ميزة خاصة بأحدهما، وسوف نذكر ذلك صراحة إذا حدث.
أخطاء شائعة
- الظن أن Terraform أصبح ممنوعاً على الشركات: الاستخدام الداخلي مسموح بنص الرخصة، والمنع يخص المنتجات المنافسة المدفوعة.
- الظن أن الرخصة تمنع الإصدارات القديمة: الإصدارات حتى 1.5.7 تبقى بـ MPL 2.0، ولكنها لا تحصل على تحديثات أمنية، فلا تبق عليها لهذا السبب.
- خلط ملفات الأداتين في المشروع نفسه دون اتفاق: إذا شغل أحد الزملاء Terraform وآخر OpenTofu على الحالة نفسها بعد أن تباعدت الإصدارات فقد تكتب الحالة بصيغة لا يفهمها الآخر، فاتفقوا على أداة واحدة وإصدار واحد لكل مشروع، واكتبوه في ملف الإعداد.
- تفعيل التشفير دون خطة للمفتاح: المفتاح الذي يضيع يضيع معه ملف الحالة، فاحفظه في مدير أسرار مع نسخة احتياطية قبل أن تفعل التشفير.
- حذف ملف
.terraform.lock.hclمن Git: بدونه ينزل كل جهاز وكل خط CI إصدار المزود الذي يجده، فتختلف النتائج ولا ترى التغيير في المراجعة.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- في 10 أغسطس 2023 نقلت HashiCorp إصدارات Terraform من 1.6.0 وما بعده إلى رخصة BUSL 1.1، وآخر إصدار مفتوح هو 1.5.7.
- الرخصة تسمح بالاستخدام الإنتاجي الداخلي وبالمنتجات المجانية، وتمنع تقديم Terraform بشكل مستضاف أو مضمن في منتج مدفوع ينافس نسخ IBM المدفوعة، وكل إصدار يتحول إلى MPL 2.0 بعد أربع سنوات.
- رد المجتمع ببيان OpenTF ثم بنسخة بديلة اسمها OpenTofu، دخلت Linux Foundation في 20 سبتمبر 2023، وصدر أول إصدار مستقر منها في 10 يناير 2024، وقبلت في CNCF في 23 أبريل 2025.
- اشترت IBM شركة HashiCorp وأتمت الصفقة في 27 فبراير 2025، والرخصة بقيت BUSL.
- المشروعان يتشاركان اللغة والمزودات وصيغة الحالة، ويختلفان في ميزات تزيد مع كل إصدار، وأهمها لنا تشفير الحالة في OpenTofu، والسجل الافتراضي مختلف.
- الاختيار يعتمد على طريقة استخدامك والمنصة التي تعمل عليها ومن تريد أن يقرر مستقبل أداتك، ونحن نستخدم OpenTofu في مقالات المرحلة.
دليلمصطلحات البنية كشيفرة IaC التي تحتاجها قبل أي أداةما معنى أن تكتب بنيتك في ملفات داخل Git، ولماذا يفشل السكربت العادي عند تشغيله مرة ثانية، وما الذي تحفظه الأداة في ملف الحالة.
دليلما هي البرمجيات مفتوحة المصدر؟ القصة وأشهر الرخصكيف بدأت البرمجيات الحرة والمفتوحة، وما الفرق بين الحر والمجاني، وكيف تعرف ما تسمح به رخصة أي مشروع قبل أن تبني عليه.
دليلمن يدير المشروع مفتوح المصدر؟ نماذج الحوكمة Governanceمن يقرر في مشروع يساهم فيه آلاف الأشخاص، ومن يستطيع تغيير رخصته، وما الذي تفحصه قبل أن تعتمد على أي مشروع.
دليلأمن سلسلة التوريد البرمجية Software Supply Chain للمبتدئينكل ما بين كود غيرك وسيرفرك قد يحمل كود المهاجم، وهنا تعرف التهديدات الحقيقية بحوادث موثقة والدفاع المناسب لكل حلقة.
دليلSecrets Scanning: كيف تكتشف الأسرار المسربة في الكودكيف يخرج المفتاح من جهازك إلى تاريخ Git وخط CI، وكيف تكتشفه قبل غيرك، وماذا تفعل في الساعة الأولى بعد تسربه.سجل التحديثات
- أكتوبر 2026: كتابة المقال اعتماداً على إعلانات HashiCorp وOpenTofu وLinux Foundation وIBM وCNCF، وملفات الرخص في وسوم Terraform 1.5.7 و1.6.0 والفرع الرئيسي، وسجلات إصدارات المشروعين حتى Terraform 1.16.5 وOpenTofu 1.13.1، دون تشغيل أي من الأداتين، فالأمثلة من الوثائق الرسمية.