هذه الترجمة قد لا تعكس التغييرات التي تم إدخالها منذ 2011-12-25 على النسخة الإنجليزية اﻷصلية.

من فضلك، راجع تعليمات الترجمة للحصول على المعلومات المتعلقة بتسليم وتنسيق ترجمات هذه المقالة.

مأزق جافاسكربت

بقلم ريتشارد ستولمن

قد لا تدرك أنك تشغل برمجيات غير حرة يومًا على حاسوبك، عبر متصفحك.

يعرف مجتمع البرمجيات الحرة أن البرامج غير الحرة تسيء لمستخدميها، ويرفض بعضنا بالكلية تثبيت البرمجيات المحتكرة، وآخرون كثيرون يعتبرون نقص الحرية عيبًا كبيرًا في البرنامج.

كثير هم المستخدمون الذين يعرفون أن هذه القضية تنطبق على الملحقات التي توفرها المتصفحات، وأنها قد تكون حرة وغير حرة. بيد أن المتصفحات تشغل برامج غير حرة أخرى لا تسألك عنها بل ولا تعلمك بوجودها، وهي البرامج التي تحتويها الصفحات أو تتصل بها. تُكتبت هذه البرامج غالبًا بجافاسكربت، لكن يمكن استخدام لغات أخرى أيضًا.

كانت جافاسكربت (التي تُسمّى رسميًا ECMAscript، لكن القليل فقط يستخدمون هذا الاسم) تُستخدم لإضافة تجميلات طفيفة على صفحات الوب، مثل خصائص مساعِدة للتصفح والعرض. يمكن أن تعتبر تلك امتدادًا لتعليم HTML، لا برمجيات حقيقة لأنها ليست مؤثرة.

كثير من المواقع لا تزال تستخدم جافاسكربت بتلك الطريقة، لكن البعض الآخر يستخدمها لبرامج كبيرة تقوم بمهام كثيرة. فعلى سبيل المثال، تُنزّل مستندات غوغل (Google Docs) برنامج جافاسكربت يبلغ حجمه نصف ميغابايت، وهو بصورة مضعوطة يجوز لنا أن نسميها "سكربت معتم" لأنها لا تحتوي أي تعليقات ولا مساحات بيضاء (whitespaces) وأسماء الطرق (methods) فيها تتكون من حرف واحد. إن الكود المصدري لبرنامج معين هو الطريقة المفضلة لتعديله، لكن الكود المضغوط ليس كودًا مصدريًا، والكود المصدري الحقيقي لذلك البرنامج غير متاح للمستخدمين.

لا تخبرك المتصفحات عادة أنها تُحمّل برامج جافاسكربت، ولمعظم المتصفحات وسيلة معينة لتعطيل جافاسكربت بالكلية، لكن لا يوجد متصفح يكتشف برامج جافاسكربت الكبيرة غير الحرة. حتى لو كنت على علم بهذه المشكلة، فستواجه الكثير من المتاعب عند محاولة التعرف على تلك البرامج ومن ثم حجبها؛ لكن -وحتى في مجتمع البرمجيات الحرة- لا يعلم المستخدمون عن هذه المشكلة، لأن صمت المتصفحات أخفاها.

يمكن إصدار برامج جافاسكربت حرة، عبر توزيع الكود المصدري تحت رخصة حرة.

لكن حتى لو توفر مصدر البرنامج، فلا توجد وسيلة سهلة لتشغيل نسختك المعدلة بدلا من الأصل. متصفحات الوب الحرة الموجودة حاليًا لا توفر وسيلة لتشغيل نسختلك المعدلة بدلا من الموجودة في الصفحة. إن الأثر مشابه لأثر التيفزة (Tivoization)، غير أن معالجته أسهل بكثير.

بيد أن جافاسكربت ليست اللغة الوحيدة التي تستخدمها مواقع الوب للبرامج التي ترسلها للمستخدمين. يدعم فلاش البرمجة عبر نوع مُوسّع من جافاسكربت. يجب أن ندرس قضية فلاش لنتمكن من إعطاء نصائح ملائمه بخصوصه، ويبدو أن سلفرلايت (Silverlight) يسبب مشكلة شبيهة بمشكلة فلاش، إلا أنها أسوأ لأن مايكروسوفت تستخدم منصتها تلك للتراميز غير الحرة. لن يؤدي أي بديل حر لسلفرلايت مهمته في العالم الحر بدون أن يُصاحب ببدائل حرة للتراميز.

بريمجات جافا أيضًا تعمل في المتصفح، وتسبب نفس المشكلة. بشكل عام، أي نظام برمجي سيسبب مشكلة شبيهة بهذه. إن امتلاك بيئة تشغيل حرة للبُريمج لا يقدم لنا إلا مواجه المشكلة.

ثمة حركة قوية تدعو لأن تتواصل المواقع مع المستخدمين عبر الأنساق والبروتوكولات الحرة (التي يسميها البعض "المفتوحة")، أي التي توثيقها منشور وللجميع حرية تنفيذها، ومع وجود البرامج في صفحات الوب، فإن تلك المعايير ضرورية، لكنها ليست مؤثرة. جافاسكربت نفسها -كنسق- حرة، ولا يلزم بالضرورة أن يكون استخدامها في المواقع سيء؛ لكن -وكما ذكرنا أعلاه- لا يلزم أيضًا أن يكون مقبولًا. عندما ينقل الموقع برنامجًا إلى المستخدم، فلا يكفي أن يكون البرنامج مكتوبًا بلغة مُوثّقة وحرة؛ بل يجب أن يكون البرنامج ذاته حرًأ أيضًا. يجب أن تصبح ”تُنقل البرمجيات الحرة وحدها إلى المستخدم“ جزءًا من معيار سلوك المواقع السليم.

إن مشكلة تحميل وتشغيل البرامج غير الحرة بصمت هي إحدى مشاكل ”تطبيقات الوب“. إن مصطلح ”تطبيق وب“ اختُرع لتجاهل الفرق الجوهري بين البرامج التي تُسلّم للمستخدم والبرامج التي تعمل على الخادوم. فيمكن أن يشير إلى برمجية تعمل خصيصًا في متصفح العميل؛ ويمكن أن يشير إلى برمجية تعمل خصيصًا في الخادوم. إن برمجيات جهة العميل وجهة الخادوم يسببان قضايا أخلاقية مختلفة، حتى لو كانا مدموجين ويمكن القول أنهما جزآن لبرنامج واحد. تتناول هذه المقالة مشكلة برمجيات جهة العميل، وسوف نناقش مشكلة الخادوم في مقالة أخرى.

كيف يمكننا التعامل مع مشكلة برامج جافاسكربت غير الحرة في مواقع الوب؟ هنا خطة عملية.

بداية نحتاج إلى معيار لتحديد برامج جافاسكربت الكبيرة. وبما أن "كبيرة" مسألة حكمية، فإن علينا تصميم معيار سهل يعطي نتائج جيدة بدلا من وضع إجابة محددة واحدة.

نقترح أن يعتبر برنامج جافاسكربت كبيرًا إذا أجرى طلب AJAX، وأن يعتبر كبيرًا إذا عرّف طرقًا (methods) وإذا حمّل سكربتًا خارجيًا أو كان هو كذلك.

سوف نقترح في نهاية المقالة وسيلة يمكن عبرها لبرنامج جافاسكربت الكبير في صفحة الوب أن يشير إلى مسار كوده المصدري، ويمكن عبرها أن يشير إلى رخصته أيضًا باستخدام تعليق مُنسّق.

ينبغي علينا آخيرًا أن نُغيّر متصفحات الوب الحرة لتدعم حرية مستخدمي صفحات الوب التي تحتوي جافاسكربت. بداية يجب أن تتاح للمتصفحات خاصية إخبار المستخدمين بوجود برامج جافاسكربت كبيرة غير حرة قبل تشغيلها. LibreJS يدعم ذلك.

مستخدمو المتصفحات بحاجة أيضًا إلى وسيلة سهلة لتحديد كود جافاسكربت ليُستخدم بدلا من كود جافاسكربت الموجود في صفحة معينة. (يمكن أن يكون الكود المُحدّد استبدلا كاملًا أو إصدارًا معدلا من برنامج جافاسكربت الحر في تلك الصفحة). مهمة Greasemonkey قريبة من ذلك، لكن ليس تمامًا، لأنه لا يُعدل كود جافاسكربت الموجود في صفحة معينة قبل بدء تشغيل البرنامج. يمكن أن ينجح استخدام وسيط (proxy) محلي لكنه حل صعب جدًا واقعيًا. علينا أن نبني حلا موثوقًا وسهلا ومواقع يمكن عبرها تبادل التغييرات. سوف يوصي مشروع غنو بالمواقع المُخصّص للتغييرات الحرة فقط.

سوف تُمكّن هذه الخصائص برامج جافاسكربت حرة من أن تكون حرة بمعنى حقيقي وعملي. لن تكون جافاسكربت عقبة أمام حريتنا، وستكون مثل سي وجافا اليوم. سوف نتمكن من رفض وحتى استبدال برامج جافاسكربت الكبيرة غير الحرة، تمامًا كما نرفض ونستبدل الحزم غير الحرة التي يمكن تثبيتها بالطريقسة العادية. يمكن أن تبدأ حينها حملتنا للطلب من مواقع الوب أن تُحرّر كود جافاسكربت.

شكرًا لMatt Lee و John Resig على مساعدتهما في صياغة معيارنا المقترح، ولDavid Parunakian لإعلامي بالمشكلة.

ملحق: وسيلة لإصدار برامج جافاسكربت حرة.

للإشارة إلى الكود المصدري المرافق، نوصي باستخدام:


    // @source:

يتبعها المسار.

للإشارة إلى رخصة كود جافاسكربت المُضمّن في الصفحة، نوصي بوضع إخطار الرخصة بين ملاحظتين على هذا النحو:



    @licstart  The following is the entire license notice for the 
    JavaScript code in this page.
    ...
    @licend  The above is the entire license notice
    for the JavaScript code in this page.

يجب أن يكون كل ذلك ضمن تعليق ذو أسطر عديدة.

تطلب غنو جي​بي​إل -مثل كثير من تراخيص البرمجيات الحرة الأخرى- توزيع نسخة من الرخصة مع المصدر والصيغة الثنائية للبرنامج. لكن غنو جي​بي​إل طويلة لدرجة تُصعّب من تضمينها في الصفحة مع برنامج جافاسكربت. يمكن أن تزيل هذا المُتطلّب من الكود الذي تملك أنت حقوق نشره عبر إخطار ترخيص كالآتي:


    Copyright (C) YYYY  Developer

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.

أشكر Jaffar Rumith على لفت انتباهي لهذه القضية.