UNIDAD 6

Software Libre:
Decisiones que Impactan en la Vida Real

Esta unidad trabaja el nudo disciplinar transversal de Software Libre: libertades de uso, estudio, copia y mejora; licencias; y sus implicancias éticas, sociales, políticas y económicas.

// Basado en Diseño Curricular (Área Matemática-Informática) y Res. 1463/18 Parte VI, ítem H.

// Situación ficticia y realista

Caso Escuela EPET Sur: el laboratorio que se quedó sin licencias

Marzo. La escuela recibe 20 computadoras donadas para el laboratorio. El problema: varias máquinas tienen software sin licencia válida y otras no pueden actualizarse por costo. La cooperadora no puede pagar un paquete completo para todos los equipos, y el área de informática debe decidir rápido para no suspender clases.

El equipo docente propone una alternativa: migrar progresivamente a herramientas de software libre. La discusión aparece enseguida: "¿es gratis solamente?", "¿es legal?", "¿vamos a poder abrir archivos?", "¿qué pasa con lo que ya sabemos usar?".

Desde acá arranca la unidad: entender qué es software libre y tomar decisiones fundamentadas.

// Entrega final · Unidad 6

Comité Técnico-Pedagógico

Datos del estudiante

Preguntas con fundamentación

1) ¿Qué estrategia de migración es más realista para una escuela con recursos limitados?

2) ¿Cuál es la diferencia correcta entre “software libre” y “software gratuito”?

3) Frente al uso de licencias, ¿qué acción institucional es más responsable?

4) ¿Qué impacto educativo tiene trabajar con software libre en la escuela?

const campusModal = document.getElementById('campusModal'); const openModalBtn = document.getElementById('openModalBtn'); const closeModalBtn = document.getElementById('closeModalBtn'); const dalesandroBtn = document.getElementById('dalesandroBtn'); // Modal event handlers provided by assets/campus-modal.js // Dalesandro navigation handled by shared script const etapa1 = document.getElementById('etapa1'); const etapa2 = document.getElementById('etapa2'); const etapa3 = document.getElementById('etapa3'); const btnEtapa1 = document.getElementById('btnEtapa1'); const btnEtapa2 = document.getElementById('btnEtapa2'); const btnEtapa3 = document.getElementById('btnEtapa3'); const openCierreModalBtn = document.getElementById('openCierreModalBtn'); const cierreModal = document.getElementById('cierreModal'); const closeCierreModalBtn = document.getElementById('closeCierreModalBtn'); const cerrarConSolucionBtn = document.getElementById('cerrarConSolucionBtn'); const enviarCierreBtn = document.getElementById('enviarCierreBtn'); const estadoCierre = document.getElementById('estadoCierre'); const cierreFormWrap = document.getElementById('cierreFormWrap'); const solucionDocenteWrap = document.getElementById('solucionDocenteWrap'); const escuelaCierre = document.getElementById('escuelaCierre'); const cursoCierre = document.getElementById('cursoCierre'); const nombreCierre = document.getElementById('nombreCierre'); const apellidoCierre = document.getElementById('apellidoCierre'); const fundamentacionFinal = document.getElementById('fundamentacionFinal'); const fundamentos = [ document.getElementById('f1'), document.getElementById('f2'), document.getElementById('f3'), document.getElementById('f4') ]; btnEtapa1.addEventListener('click', () => { etapa1.classList.remove('hidden'); setTimeout(() => etapa1.scrollIntoView({ behavior: 'smooth' }), 80); }); btnEtapa2.addEventListener('click', () => { etapa2.classList.remove('hidden'); setTimeout(() => etapa2.scrollIntoView({ behavior: 'smooth' }), 80); }); btnEtapa3.addEventListener('click', () => { etapa3.classList.remove('hidden'); setTimeout(() => etapa3.scrollIntoView({ behavior: 'smooth' }), 80); }); const schoolCourses = { 'CPEM 61': ['2B', '3A'], 'CPEM 3': ['1A TM', '1D TN', '2D TN', '2E TN'], 'EPET 11': ['1ro2da', '2do4ta'] }; function populateCursosCierre() { const escuela = escuelaCierre.value; cursoCierre.innerHTML = ''; if (!escuela || !schoolCourses[escuela]) { cursoCierre.disabled = true; const option = document.createElement('option'); option.value = ''; option.textContent = 'Primero selecciona escuela'; cursoCierre.appendChild(option); return; } cursoCierre.disabled = false; const placeholder = document.createElement('option'); placeholder.value = ''; placeholder.textContent = 'Selecciona un curso'; cursoCierre.appendChild(placeholder); schoolCourses[escuela].forEach((course) => { const option = document.createElement('option'); option.value = course; option.textContent = course; cursoCierre.appendChild(option); }); } function limpiarEstadoCierre() { estadoCierre.textContent = ''; estadoCierre.className = 'text-sm text-cyan-300'; } function resetCierreModal() { nombreCierre.value = ''; apellidoCierre.value = ''; escuelaCierre.value = ''; cursoCierre.value = ''; fundamentacionFinal.value = ''; fundamentos.forEach((campo) => { campo.value = ''; }); document.querySelectorAll('input[name="p1"], input[name="p2"], input[name="p3"], input[name="p4"]').forEach((radio) => { radio.checked = false; }); cierreFormWrap.classList.remove('hidden'); solucionDocenteWrap.classList.add('hidden'); enviarCierreBtn.disabled = false; populateCursosCierre(); limpiarEstadoCierre(); } function validarEntregaCierre() { const nombre = nombreCierre.value.trim(); const apellido = apellidoCierre.value.trim(); const escuela = escuelaCierre.value.trim(); const curso = cursoCierre.value.trim(); if (!nombre || !apellido || !escuela || !curso) { estadoCierre.textContent = 'Completa nombre, apellido, escuela y curso.'; estadoCierre.className = 'text-sm text-rose-300'; return false; } for (let i = 1; i <= 4; i += 1) { const marcada = document.querySelector('input[name="p' + i + '"]:checked'); if (!marcada) { estadoCierre.textContent = 'Falta responder la pregunta ' + i + '.'; estadoCierre.className = 'text-sm text-rose-300'; return false; } } for (let i = 0; i < fundamentos.length; i += 1) { if (!fundamentos[i].value.trim()) { estadoCierre.textContent = 'Completa la fundamentación de la pregunta ' + (i + 1) + '.'; estadoCierre.className = 'text-sm text-rose-300'; return false; } } if (!fundamentacionFinal.value.trim()) { estadoCierre.textContent = 'Completa la fundamentación final integradora.'; estadoCierre.className = 'text-sm text-rose-300'; return false; } return true; } openCierreModalBtn.addEventListener('click', () => { resetCierreModal(); cierreModal.showModal(); }); closeCierreModalBtn.addEventListener('click', () => { cierreModal.close(); }); cerrarConSolucionBtn.addEventListener('click', () => { cierreModal.close(); }); escuelaCierre.addEventListener('change', populateCursosCierre); populateCursosCierre(); enviarCierreBtn.addEventListener('click', () => { if (!validarEntregaCierre()) return; const respuestas = { p1: document.querySelector('input[name="p1"]:checked').value, p2: document.querySelector('input[name="p2"]:checked').value, p3: document.querySelector('input[name="p3"]:checked').value, p4: document.querySelector('input[name="p4"]:checked').value }; const puntaje = (respuestas.p1 === 'b' ? 1 : 0) + (respuestas.p2 === 'b' ? 1 : 0) + (respuestas.p3 === 'b' ? 1 : 0) + (respuestas.p4 === 'b' ? 1 : 0); const formData = new FormData(); formData.append('nombre', nombreCierre.value.trim()); formData.append('apellido', apellidoCierre.value.trim()); formData.append('escuela', escuelaCierre.value.trim()); formData.append('curso', cursoCierre.value.trim()); formData.append('puntaje', String(puntaje)); formData.append('p1', respuestas.p1); formData.append('p2', respuestas.p2); formData.append('p3', respuestas.p3); formData.append('p4', respuestas.p4); formData.append('f1', fundamentos[0].value.trim()); formData.append('f2', fundamentos[1].value.trim()); formData.append('f3', fundamentos[2].value.trim()); formData.append('f4', fundamentos[3].value.trim()); formData.append('fundamentacion_final', fundamentacionFinal.value.trim()); enviarCierreBtn.disabled = true; estadoCierre.textContent = 'Enviando entrega...'; estadoCierre.className = 'text-sm text-cyan-300'; fetch('guardar_softwarelibre_cierre.php', { method: 'POST', body: formData }) .then(async (response) => { const data = await response.json().catch(() => ({ ok: false, error: 'Respuesta invalida del servidor' })); if (!response.ok || !data.ok) { throw new Error(data.error || 'No se pudo guardar la entrega'); } cierreFormWrap.classList.add('hidden'); solucionDocenteWrap.classList.remove('hidden'); estadoCierre.textContent = ''; }) .catch((error) => { estadoCierre.textContent = error.message; estadoCierre.className = 'text-sm text-rose-300'; enviarCierreBtn.disabled = false; }); }); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); } }); }, { threshold: 0.1 }); document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); });