Do I have to delete all the textures I created (using glDeleteTextures) before the program exists, or does OpenGL delete the textures by himself?
OpenGL resources are frees implicitly once all contexts with access to them are destroyed. OpenGL contexts of a process get destroyed when the client terminates; however in the case of indirect GLX context objects may be shared among X11 clients, so they may be freed only after the last client with access to them terminates.
Nevertheless it's always a good practice to clean up after yourself.