I have notice that SetLength's Len parameter is declared as SizeInt. Also properties Size and Position of TStream are declared as Int64. Why this things are signed? Isn't a negative length is an absurd?
Yes, a negative length is, indeed, absurd.
The real answer to your question is in the very undesirable subtleties involved in expressions that include a mix of the most encompassing unsigned type and the most encompassing signed data type. Stated in simple terms and, specifically in FPC, the problems the compiler faces when dealing with expressions that involve both, a qword type and an int64 type. Mixing those two can potentially be quite problematic for the compiler. The simple solution ? ... most compilers try "encouraging" programmers to "avoid the top unsigned type" in expressions, in the case of FPC, do whatever you can to avoid ending up with expressions that involve a mix of qword and int64.
That implicit "encouragement" to avoid the mixing of those two types is the reason many types that are naturally unsigned are declared as being the signed int64. The alternative would have been to have them as DWORD types but, that imposes a limit which, in a 64 bit world, is kind of low, only 4 billion elements out of 2^64 - 1 is actually small. Making it a qword certainly solves that problem but, opens the door to the qword/int64 type mix the compiler wants to avoid, that leaves the signed int64 as the alternative. That alternative allows the compiler to support a number of elements that is much larger than 2^32 while not opening the door to creating the problem the compiler wants to avoid.
Neither the compiler writers nor those who document the compiler have any desire to attempt explaining the reason for the "absurd" choice because understanding the real reason requires knowledge that isn't as common as you'd think in the average programmer. The result is, just make the type a signed type and leave it at that.
Notice how I've also avoided explaining the reason. I've simply stated that mixing qword and int64 in expressions causes problems for the compiler, which is indeed the real reason but, I've purposely avoided stating why. if you want to know why, a good A.I model, such as Claude, can give you accurate answers to all of the questions you'll probably have as a result along with a few examples of the problems faced by the compiler in cases where qword and int64 are mixed. Bottom line: if you want a full detailed explanation, ask AI to give it to you.

Otherwise, the reason is, mixing qword and int64 causes problems most compilers want to _silently_ avoid.
HTH.