Y es que este sistema operativo se ha ganado mis más sentidos odios desde que recuerdo el CP/M del Amstrand…
Llevo unos cuantos meses en el que estamos portando un par de entornos de una tru64 (máquina de Compact) a una HPUX (recordar que HP compró Compact). Bien, como ya no hay soporte para las tru64, antes o después todo el mundo se acaba pasando hacia el lado HP y claro, al hacerlo hay que intentar llevar los productos de un entorno para otro.
Así que, después de unos cuantos meses trabajando en este entorno a un nivel de porting, puedo decir sin despeinarme que esta máquina / sistema operativo es una bazofia de mucho cuidado.
Y para ello, solo voy a poner dos ejemplos simples y sencillos:
- Situación: te encuentras con un core bonito de un código que miras y remiras y parece que debería funcionar (partiendo de la base que en una tru64 funcionaba). Simplemente ves que una función devuelve un char* que ha reservado memoria con un strdup y que esta cadena será utilizada y liberada por la función que lo llama (por cierto, el tratamiento de cadenas con C es hartante como él solo). En fin, tenemos un core y nos ponemos a pasarle el gdb para ver que pasa (por supuesto el core solo se produce en producción, nada de producirse en el entorno de testing). Vemos que la cadena tiene un out of bounds; leches, ¡estamos apuntado a dónde no debemos! Miramos una y otra vez y nada, todo bien y, como tontería, pruebo a ponerlo directamente en un sprintf el retorno de la función sin pasar por variable (y creando de paso una laguna de memoria porque no libero la memoria, pero bueno, que para probar sirve) y leches… ¡funciona! Pero si lo asignas a una triste variable char* falla al acceder a ello… ¿Qué puede ser? ¿Qué puede ser?
Solución: Mira los includes porque falta el del fichero dónde está esa función.
Resultado post-laboratorio: Sentimiento de odio brutal porque algo que es un simple warning de compilación o que leches, que no compile (como la librería linkaba con el sistema resolvía correctamente la función)… pero que funcione todo y se le de por hacer un maldito core dump… Por favor, ¡a quién se le ocurre! ¬_¬ - Situación: te encuentras con que una librería de lo más normal que simplemente abre un socket con un servidor… no funciona o.O? Te pegas y te pegas y no conecta; ¿Por qué puede ser?
Solución: HPUX 11.31B descontinúa una serie de opciones del protocolo estándar de comunicaciones que estaba instaurado desde la HPUX 11.23 hacia atrás (y en todos los libros / documentos / etc que hablan de las comunicaciones en cualquier entorno) y se carga directamente las opciones de timeout via setsockopt… Y claro, ¿qué hace al cargarse eso? Pues producir un error, qué otra cosa va a hacer…
Resultado post-laboratorio: Odio destilándose por todas partes por doquier ¬_¬
Y cómo estos dos ejemplos muchos más. Así que si podéis escapar de estas máquinas/sistemas operativos, escapar como alma que lleva el diablo, que desde luego no os traerá nada bueno es vuestra vida.
En fin, qué toda alma de developer debe de ser cuidada y animada con esta canción xD
Carlos says:
¡Ay, my friend! El problema no está en la plataforma, sino en el lenguaje. ¿Quién te manda usar C? Esto con Java no te pasaría, que lo puedes instalar hasta en una lavadora :-P
Karstiel says:
@Carlos: Si es que, C.. ese ente maligno que trata las cadenas de texto como cosas raras de memoria :P
Hypnotoad says:
Pobre lavadora… En fin. Java facilita mucho las cosas, pero no se te ocurra hacer un sistema de facturacion (ni de gestion de bonos) con el, y se lo que me digo.
1.- No puedo entender como podia resolver una funcion de la que faltaba la deficnición. Eso me lo tienes que explicar mas detenidamente.
2.- ¡Ole tus huevos, HP! A eso lo llamo yo ser POSIX-compilant.
Paciencia chaval.
Karstiel says:
@Hypnotoad: Pues es relativamente sencillo lo de la falta de la definición… Ponte que lo linkas con la librería que lo posee, así que más o menos, funciona ;) Eso sí, supongo que saldrá un warning (de tantos) XD
Jose says:
Estoy de acuerdo, para el que no sabe lo mejor es Java y para el que sabe un poco lo mejor es C.
Respecto al S.O. me reservo mi opinión porque aun no la tengo clara.
Y respecto a tooodos los problemas con los que os encontrais, la solución diría que empieza por subir las restricciones del compilador que useis, seguramente el aCC. Y leeros la ayuda sobre los flags de compilación que hay muchos.
Karstiel says:
@Jose: La verdad es que por exigencias del guión, hemos tenido que usar el gcc en su versión 3.4.4, la cuál tiene unos cuántos bugs conocidos en esta plataforma :/
Al final se hizo correctamente la migración (unos 5 – 6 meses, con pruebas y todo) y medio puesto en el cliente ;)