¿Quién decide si usar TCP o UDP?

HTTP siempre usa TCP: fue una decisión de diseño de Berners-Lee. La mayoría de los protocolos que requieren confiabilidad usan TCP, ya que se establece la comunicación y la entrega se garantiza al reenviar los paquetes que faltan. Web, correo electrónico, SSH, IRC usan TCP.

UDP se utiliza cuando el tiempo es más importante que la entrega. Si se pierde un paquete de datos de audio durante una llamada telefónica por Internet, no tiene sentido volver a enviarlo, es demasiado tarde, el sonido ya se ha reproducido. Entonces RTP usa UDP.
UDP se usó en tiempos más inocentes para protocolos como DNS y NTP, pero esto se está convirtiendo en una responsabilidad debido a la facilidad de suplantación de la dirección de origen en los paquetes UDP y el consiguiente uso de UDP en ataques DDOS de amplificación de tráfico.

El próximo protocolo WebRTC implementado directamente en los navegadores usa RTP y, por lo tanto, supongo, UDP.

Lo siento, pero tu pregunta es un poco confusa, pero haré todo lo posible para explicarte
TCP y UDP son protocolos de transporte que HTTP ejecuta en el TCP superior. El protocolo de aplicación (HTTP, DNS) decide qué protocolo de transporte utilizar. Al igual que HTTP ha decidido TCP con el puerto 80. En el caso de DNS, ha decidido usar el puerto 53 de UDP (por lo general, a veces también usa TCP). ¿Dónde puedes obtener esta información? Respuesta: RFC

google: RFC
Protocolo de transferencia de hipertexto – HTTP / 1.1
Página en ietf.org -DNS RFC

Esto está determinado por la definición en el (los) protocolo (s) utilizado (s) y es típicamente una decisión de diseño entre confiabilidad (TCP) y velocidad (UDP), ya que UDP es un paquete mucho más pequeño y tiene una sobrecarga mucho menor y no se entrega de manera confiable. TCP confirma cada paquete enviado y solicita una retransmisión de los paquetes faltantes. Esto es excesivo para muchas aplicaciones.

En resumen, es la “decisión” de la aplicación y los protocolos que se utilizan para la comunicación.

El programa se puede escribir usando UDP o TCP. El paquete java.net proporciona la facilidad de usar cualquiera de estos protocolos en lenguaje de programación como java. Existe una instalación similar en otros lenguajes como C. Por lo tanto, el programador decide si usar TCP o UDP.

El programador decide. Normalmente, elige TCP. O se equivoca.