La ley AB 1043 (Digital Age Assurance Act) de California se convierte en un ataque frontal a Linux

También me enteré de Ageless Linux hoy. Me anima ver que la gente no ha aceptado la ley y que no se ha quedado sentada sin hacer nada.

Por mi parte, me pasé a Devuan hoy mismo.

2 Me gusta

Revisa la wiki de tu distro; si no encuentras nada, vete a la de la distribución “madre” si es que usas una derivada. Hay distribuciones que están atadas a systemd y su suite, por ejemplo, Fedora o NixOS.
Ahí es imposible cambiar el init, eso fue lo que encontré durante el research de hoy.

Recursos:

3 Me gusta

Yo, como digo, estoy tranquilo. Tanto en Slackware, la distro que utilizo y no creo que ceda, o ni tan siquiera que tenga la capacidad de ceder; como en el entorno de servidores, embebidos, industrial… No creo que llegue a mucho en los feudos de Linux, si bien claro que puede afectar a las distros principiantes o tolerantes, como Ubuntu, Mint…

Si afecta a Debian, será a través de systemd. Pero, ¿cómo afectaría eso al rey de los servidores? ¿servidores con control de edad? No sé cómo se gestionará en Debian.

4 Me gusta

Terminamos antes diciendo cuáles no han cedido al entorno de systemd, desgraciadamente para la comunidad.

Con Debian se puede remover systemd e instalar otro init durante la instalación. Devuan simplemente ahorra ese paso.

EDIT: Me olvidé de aclarar que Ageless Linux es el Debian habitual el cual se le corre un script para setear los parámetros de edad de SystemD como “ageless” y así envenenar los datos.

Está semana me he encontrado con muchísimas personas que promueven el data poisoning para no solo ocultar tu información, si no también para envenenar algoritmos y a los modelos de machine learning.

Hay una extensión de navegador llamada “TrackMeNot” que en segundo plano realiza búsquedas aleatorias y contradictorias entre si para así envenenar la recopilación de datos.

Así como está extensión, me enteré de que hay otras que hacen click en todas las publicidades. De esta manera, mientras que la primera extensión hace creer al algoritmo que te gusta de todo, aún cuando está información se contradice, la otra sigue hechando leña al fuego para hacerles creer que si te está interesando eso y estás haciendo click en cada anuncio.

3 Me gusta

La ley es ridícula porque abarca a todo tipo de sistemas operativos, incluidos los de routers como OpenWRT, RouterOS e incluso el SO de calculadoras.

Así de ridícula es la ley y encima se descubrió con muchísima evidencia que todo esto fue impulsado por Meta…

3 Me gusta

ni c t ocurra cambiar tu init system si tu distro soporta uno solo (ej: Debian), t va a destrozar la máquina

1 me gusta

Es triste ver que proyectos “libres” como systemd se les olvida o simplemente ignoran el espíritu revolucionario que conyeba buscar la libertad, se esta dejando de lado la privacidad y control que tiene el usuario sobre el sistema, que sera lo próximo? Distribuciones con KYC?

2 Me gusta

Time to install Gentoo

1 me gusta

Siento que llego tarde a leer todo esto. Entonces, para los que usamos Debian la solucion es irse por Devuan? (o en todo caso meter mano uno y reemplazar systemd?)

2 Me gusta

no es recomendable instalar un init diferente al que viene por de|ecto. Distros como Debian sen muy dependientes de SystemD

2 Me gusta

En el día de ayer, se ha visto publicado en el Linux Kernel Mail List un correo que detalla un parche muy llamativo: [PATCH] vfs: require verified birth date for file creation.

vfs: require verified birth date for file creation

En él, Brauner detalla que, por la nueva regulación, todo el contenido digital, incluido las operaciones de creación de archivos deben ser realizadas por adultos verificados, ¡la creación de archivos!. Ya que la creación de archivos es la más primitiva y fundamental forma de creación de contenido en un sistema operativo, por lo que va regulado por la VFS.

El parche introduce CONFIG_VFS_AGE_VERIFICATION que, cuando está habilitado, requiere que todos los procesos registren una fecha de nacimiento válida a través de prctl(PR_SET_BIRTHDATE) antes de que se le permita crear archivos. La fecha de nacimiento se almacena en struct task_struct y se hereda a través de fork().

La creación del archivo fallará con el nuevo código de error ETOOYOUNG si:

  • No se ha registrado fecha de nacimiento.
  • La fecha de nacimiento registrada indica que el usuario es menor de 18 años.

Se ha añadido el nuevo errno, ETOOYOUNG (134). De esta forma el espacio de usuario o la propia distribución pueda manejar el error mostrando un mensaje tranquilizador. El autor sugiere «se requiere un padre o tutor legal que cree el archivo en su nombre».

Aquí está todo el código del diff para quien le interese:

@@ -42,6 +42,23 @@ source "fs/crypto/Kconfig"
 source "fs/verity/Kconfig"
 source "fs/notify/Kconfig"

+config VFS_AGE_VERIFICATION
+	bool "Require birth date verification for file creation"
+	default y
+	help
+	  When enabled, every process must register a valid birth date via
+	  prctl(PR_SET_BIRTHDATE, day, month, year) before being allowed to
+	  create files. Processes that have not registered a birth date or
+	  whose registered birth date indicates they are under 18 years of
+	  age will receive -ETOOYOUNG on any file creation attempt.
+
+	  If unsure, say Y. Failure to comply may result in stern letters
+	  from lawyers. You don't want that. Trust us. Say Y.
+
 source "fs/quota/Kconfig"

 source "fs/autofs/Kconfig"
diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
index 1..2 100644
--- a/include/uapi/asm-generic/errno.h
+++ b/include/uapi/asm-generic/errno.h
@@ -20,4 +20,6 @@

 #define EHWPOISON	133	/* Memory page has hardware error */

+#define ETOOYOUNG	134	/* Process too young to create content */
+
 #endif
diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
index 3..4 100644
--- a/include/uapi/linux/prctl.h
+++ b/include/uapi/linux/prctl.h
@@ -328,4 +328,8 @@

 #define PR_LOCK_INDIR_BR_LP_STATUS      82

+/* age verification for file creation */
+#define PR_SET_BIRTHDATE		83
+#define PR_GET_BIRTHDATE		84
+
 #endif /* _LINUX_PRCTL_H */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5..6 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1215,6 +1215,14 @@ struct task_struct {
 #endif
 	struct seccomp			seccomp;
 	struct syscall_user_dispatch	syscall_dispatch;
+
+#ifdef CONFIG_VFS_AGE_VERIFICATION
+	/* compliance - birth date for age verification */
+	u8				birthdate_day;
+	u8				birthdate_month;
+	u16				birthdate_year;
+	bool				birthdate_verified;
+#endif

 	/* Thread group tracking: */
 	u64				parent_exec_id;
diff --git a/kernel/sys.c b/kernel/sys.c
index 7..8 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -2345,6 +2345,48 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
 		break;
+
+#ifdef CONFIG_VFS_AGE_VERIFICATION
+	case PR_SET_BIRTHDATE:
+	{
+		u8 day = (u8)arg2;
+		u8 month = (u8)arg3;
+		u16 year = (u16)arg4;
+		struct tm now;
+		int age;
+
+		/* Basic date validation */
+		if (month < 1 || month > 12)
+			return -EINVAL;
+		if (day < 1 || day > 31)
+			return -EINVAL;
+		if (year < 1900)
+			return -EINVAL;
+
+		time64_to_tm(ktime_get_real_seconds(), 0, &now);
+
+		/* The kernel does not support vampires or immortal entities */
+		if ((now.tm_year + 1900) - year > 150)
+			return -EINVAL;
+
+		/* No time travelers either */
+		if (year > (now.tm_year + 1900))
+			return -EINVAL;
+
+		me->birthdate_day = day;
+		me->birthdate_month = month;
+		me->birthdate_year = year;
+		me->birthdate_verified = true;
+
+		age = (now.tm_year + 1900) - year;
+		if (now.tm_mon + 1 < month ||
+		    (now.tm_mon + 1 == month && now.tm_mday < day))
+			age--;
+
+		if (age < 18)
+			pr_info_ratelimited("Process %d (comm: %s) registered as minor (age %d). "
+				"File creation will be denied. Please ask a "
+				"parent or guardian for assistance.\n",
+				task_pid_nr(me), me->comm, age);
+		break;
+	}
+	case PR_GET_BIRTHDATE:
+		if (!me->birthdate_verified)
+			return -EINVAL;
+		if (put_user(me->birthdate_day, (u8 __user *)arg2) ||
+		    put_user(me->birthdate_month, (u8 __user *)arg3) ||
+		    put_user(me->birthdate_year, (u16 __user *)arg4))
+			return -EFAULT;
+		break;
+#endif /* CONFIG_VFS_AGE_VERIFICATION */
+
 	default:
 		error = -EINVAL;
 		break;
diff --git a/fs/namei.c b/fs/namei.c
index 9..10 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -4148,6 +4148,45 @@ static int vfs_mknodat(struct mnt_idmap *idmap, struct dentry *dentry,
 		       umode_t mode, dev_t dev);

+#ifdef CONFIG_VFS_AGE_VERIFICATION
+/**
+ * check_age_verification - verify the calling process has registered a valid
+ *                          birth date and is old enough to create files.
+ *
+ * Returns 0 if the caller is verified as an adult (>= 18 years old).
+ * Returns -ETOOYOUNG if the caller is a minor or has not registered a
+ * birth date.
+ *
+ * This function exists because the fundamental UNIX
+ * principle of "everything is a file" was insufficiently regulated.
+ */
+static int check_age_verification(void)
+{
+	struct task_struct *tsk = current;
+	struct tm now;
+	int age;
+
+	if (!tsk->birthdate_verified) {
+		pr_warn_ratelimited(
+			"Process %d (comm: %s) attempted to create a file "
+			"without age verification. Set birth date via "
+			"prctl(PR_SET_BIRTHDATE, day, month, year).\n",
+			task_pid_nr(tsk), tsk->comm);
+		return -ETOOYOUNG;
+	}
+
+	time64_to_tm(ktime_get_real_seconds(), 0, &now);
+
+	age = (now.tm_year + 1900) - tsk->birthdate_year;
+	if (now.tm_mon + 1 < tsk->birthdate_month ||
+	    (now.tm_mon + 1 == tsk->birthdate_month &&
+	     now.tm_mday < tsk->birthdate_day))
+		age--;
+
+	if (age < 18) {
+		pr_warn_ratelimited(
+			"Process %d (comm: %s) is only %d years old. "
+			"Must be 18 or older to create files. "
+			"Ask a parent or guardian for help.\n",
+			task_pid_nr(tsk), tsk->comm, age);
+		return -ETOOYOUNG;
+	}
+
+	return 0;
+}
+#endif /* CONFIG_VFS_AGE_VERIFICATION */
+
 /**
  * vfs_create - create new file
  * @idmap:	idmap of the mount the inode was found from
@@ -4170,6 +4209,12 @@ int vfs_create(struct mnt_idmap *idmap, struct dentry *dentry, umode_t mode,
 	if (error)
 		return error;

+#ifdef CONFIG_VFS_AGE_VERIFICATION
+	error = check_age_verification();
+	if (error)
+		return error;
+#endif
+
 	if (!dir->i_op->create)
 		return -EACCES;	/* shouldn't it be ENOSYS? */

--
2.49.0

Entre las partes más interesantes, a mi parecer, son que con este parche, el Kernel de Linux no soportará deliberadamente el uso de vampiros ni entidades inmortales, estableciendo un condicional que si, la fecha es superior a 150 años en el pasado, devuelve error.

/* The kernel does not support vampires or immortal entities */
if ((now.tm_year + 1900) - year > 150)
    return -EINVAL;

Tampoco soportará viajeros en el tiempo, que tengan establecida una fecha de futuro.

/* No time travelers either */
if (year > (now.tm_year + 1900))
    return -EINVAL;

Si has llegado hasta aquí ya habrás notado que ayer fue 1 de abril, fecha en el que muchos países anglosajones celebran un día de inocentadas y bromas. Hasta el mismo Linus Torvalds ha respondido al mail:

Respuesta de Linus Torvalds

¡Hay que tener sentido del humor!

8 Me gusta

Menos mal esto es una broma :joy:

2 Me gusta

Además, ese código se ve más cómo programación de videojuegos que de sistemas…

Como causarle un micro infarto a un usuario del kernel Linux.

Buenas,

El creador de Slackware ya dijo que nada de añadir eso en su distro https://www.youtube.com/watch?v=M5Wd39RNzvg

Un saludo

2 Me gusta

Que grande, quiero probar slackware, pero temo que se convierta en mi distro favorita.

2 Me gusta