Very strange problem during beginning with MKR Wifi 1010

Reduced to its most basic size, the sketch I include below in this post downloads with 5% of Flash space, and 8% of RAM.

However, the download does not finish and gets stuck on the size information.

Le croquis utilise 15416 octets (5%) de l'espace de stockage de programmes. Le maximum est de 262144 octets.
Les variables globales utilisent 2636 octets (8%) de mémoire dynamique, ce qui laisse 30132 octets pour les variables locales. Le maximum est de 32768 octets.

10 minutes later it displays this :

Une erreur est survenue lors du transfert du croquis
processing.app.SerialException: Erreur d'ouverture du port série « COM10 ».
	at processing.app.Serial.<init>(Serial.java:152)
	at processing.app.Serial.<init>(Serial.java:82)
	at processing.app.SerialMonitor$2.<init>(SerialMonitor.java:132)
	at processing.app.SerialMonitor.open(SerialMonitor.java:132)
	at processing.app.AbstractMonitor.resume(AbstractMonitor.java:132)
	at processing.app.Editor.resumeOrCloseSerialMonitor(Editor.java:2120)
	at processing.app.Editor.access$1300(Editor.java:117)
	at processing.app.Editor$UploadHandler.run(Editor.java:2089)
	at java.lang.Thread.run(Thread.java:748)
Caused by: jssc.SerialPortException: Port name - COM10; Method name - openPort(); Exception type - Port busy.
	at jssc.SerialPort.openPort(SerialPort.java:164)
	at processing.app.Serial.<init>(Serial.java:141)
	... 8 more
Erreur d'ouverture du port série « COM10 ».

Hereafter the code :

int tex = 0;     //Température extérieure
int tch = 0;     //Température Chaudière
int tct = 0;     //Température circuit
int tec = 0;     //Température ECS
int alarm = 0;    //Numéro d'alarme
int cons = 0;  //Consommation session en temps de vis (s)
int all = 0;    //Temps d'allumage de la session ou maxi si pas en chauffe
int fum = 0;    //Température de fumée actuelle ou maxi si pas en chauffe
int ses = 0;     //Nombre de sessions de la journée
int state = 0;    //Etat du graphe de chauffe
bool ecs = 0;     //Etat de besoin d'ECS
bool hiver = 0;   //Mode hiver
char c;
String Msg;

void setup() {
  Serial.begin(9600);
}

void loop() {

  //****************************************** Récupération valeurs chaudière via ventilation ***********************************
  
  while ((c = Serial.read()) > '\n') Msg += (char) c; 
       if (c == '\n')
          {if (Msg.substring(0,3).equals("tch")) 
            { tch = (int)(Msg.substring(3,5)).toInt();
              Serial.print("Temp Chaudiere :");
              Serial.println(tch);
              Msg = ""; }
          if (Msg.substring(0,3).equals("tct")) 
            { tct = (int)(Msg.substring(3,5)).toInt();
              Serial.print("Temp Circuit :");
              Serial.println(tct);
              Msg = ""; }
          if (Msg.substring(0,3).equals("tex")) 
            { tex = ((int)(Msg.substring(3,5)).toInt())-20;
              Serial.print("Temp Ext :");
              Serial.println(tex);
              Msg = ""; }
          if (Msg.substring(0,3).equals("ecs")) 
            { ecs = (bool)(Msg.substring(3,4)).toInt();
              Serial.print("Besoin d'ECS :");
              Serial.println(ecs);
              Msg = ""; }
          if (Msg.substring(0,5).equals("alarm")) 
            { alarm = (int)(Msg.substring(5,6)).toInt();
              Serial.print("Alarme :");
              Serial.println(alarm);
              Msg = ""; }
          if (Msg.substring(0,5).equals("state")) 
            { state = ((int)(Msg.substring(5,7)).toInt())-10;
              Serial.print("Etat :");
              Serial.println(state);
              Msg = ""; }
          if (Msg.substring(0,5).equals("hiver")) 
            { hiver = (bool)(Msg.substring(5,6)).toInt();
              Msg = ""; 
              Serial.print("Hiver :");
              Serial.println(hiver);}
          if (Msg.substring(0,3).equals("tec")) 
            { tec = (int)(Msg.substring(3,5)).toInt();
              Serial.print("Temp ECS :");
              Serial.println(tec);
              Msg = ""; }
          if (Msg.substring(0,4).equals("cons"))   
            { cons = ((int)(Msg.substring(4,9)).toInt())-10000;
              Serial.print("Consommation :");
              Serial.println(cons);
              Msg = ""; }
          if (Msg.substring(0,3).equals("fum"))   
            { fum = ((int)(Msg.substring(3,6)).toInt())-100;
              Serial.print("Temp Fumee :");
              Serial.println(fum);
               Msg = "";}
          if (Msg.substring(0,3).equals("all"))   
            { all = ((int)(Msg.substring(3,5)).toInt())-100;
              Serial.print("Temps d'Allumage :");
              Serial.println(all);
              Msg = ""; }
          if (Msg.substring(0,3).equals("ses"))   
            { ses = ((int)(Msg.substring(3,5)).toInt())-10;
              Serial.print("Nb Sessions :");
              Serial.println(ses);
              Msg = ""; }  } }

The problem seems to be that this card does not have a dedicated USB chip. It is therefore affected by the code of this sadly simple sketch, which represents only a tiny part of my need.

I did a test by replacing Serial by Serial1 (for both print and read).

Always gaming with the quick double reset and switch on a second port, than retrieving the initial one, I finally successfully uploaded the sketch.
BUT.... How can I setup a sketch without serial monitor ???

I have to admit that it is purely unusable for me ( and thus probably for many others...)
How can be put on the market a product officially dedicated to the IoT and which is simply unable to manage its UART... ???
The firmware is obviously not completed. Waste of time and money... I am VERY disappointed and will now turn to products whose development is completed and whose users confirm their capabilities and qualities, such as the ESP32.
Thank you anyway for your patience and your pedagogy.