From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from rn-mailsvcp-ppex-lapp44.apple.com (rn-mailsvcp-ppex-lapp44.apple.com [17.179.253.48]) by mx.groups.io with SMTP id smtpd.web11.9734.1626969505931134158 for ; Thu, 22 Jul 2021 08:58:26 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@apple.com header.s=20180706 header.b=sR88RgRC; spf=pass (domain: apple.com, ip: 17.179.253.48, mailfrom: afish@apple.com) Received: from pps.filterd (rn-mailsvcp-ppex-lapp44.rno.apple.com [127.0.0.1]) by rn-mailsvcp-ppex-lapp44.rno.apple.com (8.16.1.2/8.16.1.2) with SMTP id 16MFuq6c011766; Thu, 22 Jul 2021 08:58:25 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=from : message-id : content-type : mime-version : subject : date : in-reply-to : cc : to : references; s=20180706; bh=ZIoz82jnKZt7tvSirnFqZMqpHPPLxmHxbo7CpoUjcWY=; b=sR88RgRCS0dh7MAWLeHolBibjViUG6FLxGNNCaN3KlY4xRRNwnc5DtpWNgzrHMsiQmUB fzoHcPH/KTFOqr0kWyRntIHdXGbFgiXyS9xkTWd7V6OKcf0OMlpmt2qTgk2WU//OqQXv iD02txknANu4zJoT4zZ4744Fo8fYtzLUyt1lshJ2m+PhrRhtGYniWzubyTQbAS+0x2D0 fasIrLQ2kHPtw5kEncl8y/sPvbrOm2H+z+NbwOMX9DCS9xnWGXfwSZLVxU5DEvXGWtV+ tZ9J3DoZSYqTwdqzlT0UAIbQMnYALCqXyE+jaAt78yWlQqb0u/GRPMqSDSq46xcfUSP0 HQ== Received: from rn-mailsvcp-mta-lapp01.rno.apple.com (rn-mailsvcp-mta-lapp01.rno.apple.com [10.225.203.149]) by rn-mailsvcp-ppex-lapp44.rno.apple.com with ESMTP id 39utqah3bh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 22 Jul 2021 08:58:25 -0700 Received: from rn-mailsvcp-mmp-lapp03.rno.apple.com (rn-mailsvcp-mmp-lapp03.rno.apple.com [17.179.253.16]) by rn-mailsvcp-mta-lapp01.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) with ESMTPS id <0QWN00PAWLPDMKE0@rn-mailsvcp-mta-lapp01.rno.apple.com>; Thu, 22 Jul 2021 08:58:25 -0700 (PDT) Received: from process_milters-daemon.rn-mailsvcp-mmp-lapp03.rno.apple.com by rn-mailsvcp-mmp-lapp03.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) id <0QWN00R00LI4AX00@rn-mailsvcp-mmp-lapp03.rno.apple.com>; Thu, 22 Jul 2021 08:58:25 -0700 (PDT) X-Va-A: X-Va-T-CD: d6bc543c87f9d399ab3a610108ad98a8 X-Va-E-CD: 4715730f02fb6cb650dbd58f0a6f1397 X-Va-R-CD: d46b512246eb718692dfc0eca4d4782e X-Va-CD: 0 X-Va-ID: 39fe9e21-bd9b-4ef9-bb41-4920e135ca69 X-V-A: X-V-T-CD: d6bc543c87f9d399ab3a610108ad98a8 X-V-E-CD: 4715730f02fb6cb650dbd58f0a6f1397 X-V-R-CD: d46b512246eb718692dfc0eca4d4782e X-V-CD: 0 X-V-ID: d3dfafcd-ec15-4d31-a1b3-e79d13334ab2 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-07-22_09:2021-07-22,2021-07-22 signatures=0 Received: from [17.235.22.88] (unknown [17.235.22.88]) by rn-mailsvcp-mmp-lapp03.rno.apple.com (Oracle Communications Messaging Server 8.1.0.9.20210415 64bit (built Apr 15 2021)) with ESMTPSA id <0QWN002KPLPBXA00@rn-mailsvcp-mmp-lapp03.rno.apple.com>; Thu, 22 Jul 2021 08:58:24 -0700 (PDT) From: "Andrew Fish" Message-id: MIME-version: 1.0 (Mac OS X Mail 14.0 \(3654.20.0.2.1\)) Subject: Re: [edk2-devel] RFC: EXT4 filesystem driver Date: Thu, 22 Jul 2021 08:58:22 -0700 In-reply-to: Cc: pedro.falcato@gmail.com To: edk2-devel-groups-io , mhaeuser@posteo.de References: X-Mailer: Apple Mail (2.3654.20.0.2.1) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-07-22_09:2021-07-22,2021-07-22 signatures=0 Content-type: multipart/alternative; boundary="Apple-Mail=_B1BA9CB3-B26B-4BB1-9C2A-69A68797161F" --Apple-Mail=_B1BA9CB3-B26B-4BB1-9C2A-69A68797161F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jul 22, 2021, at 3:24 AM, Marvin H=C3=A4user wro= te: >=20 > On 22.07.21 01:12, Pedro Falcato wrote: >> EXT4 (fourth extended filesystem) is a filesystem developed for Linux >> that has been in wide use (desktops, servers, smartphones) since 2008. >>=20 >> The Ext4Pkg implements the Simple File System Protocol for a partition >> that is formatted with the EXT4 file system. This allows UEFI Drivers, >> UEFI Applications, UEFI OS Loaders, and the UEFI Shell to access files >> on an EXT4 partition and supports booting a UEFI OS Loader from an >> EXT4 partition. >> This project is one of the TianoCore Google Summer of Code projects. >>=20 >> Right now, Ext4Pkg only contains a single member, Ext4Dxe, which is a >> UEFI driver that consumes Block I/O, Disk I/O and (optionally) Disk >> I/O 2 Protocols, and produces the Simple File System protocol. It >> allows mounting ext4 filesystems exclusively. >>=20 >> Brief overhead of EXT4: >> Layout of an EXT2/3/4 filesystem: >> (note: this driver has been developed using >> https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html as >> documentation). >>=20 >> An ext2/3/4 filesystem (here on out referred to as simply an ext4 files= ystem, >> due to the similarities) is composed of various concepts: >>=20 >> 1) Superblock >> The superblock is the structure near (1024 bytes offset from the start) >> the start of the partition, and describes the filesystem in general. >> Here, we get to know the size of the filesystem's blocks, which feature= s >> it supports or not, whether it's been cleanly unmounted, how many block= s >> we have, etc. >>=20 >> 2) Block groups >> EXT4 filesystems are divided into block groups, and each block group co= vers >> s_blocks_per_group(8 * Block Size) blocks. Each block group has an >> associated block group descriptor; these are present directly after the >> superblock. Each block group descriptor contains the location of the >> inode table, and the inode and block bitmaps (note these bitmaps are on= ly >> a block long, which gets us the 8 * Block Size formula covered previous= ly). >>=20 >> 3) Blocks >> The ext4 filesystem is divided into blocks, of size s_log_block_size ^ = 1024. >> Blocks can be allocated using individual block groups's bitmaps. Note >> that block 0 is invalid and its presence on extents/block tables means >> it's part of a file hole, and that particular location must be read as >> a block full of zeros. >>=20 >> 4) Inodes >> The ext4 filesystem divides files/directories into inodes (originally >> index nodes). Each file/socket/symlink/directory/etc (here on out refer= red >> to as a file, since there is no distinction under the ext4 filesystem) = is >> stored as a /nameless/ inode, that is stored in some block group's inod= e >> table. Each inode has s_inode_size size (or GOOD_OLD_INODE_SIZE if it's >> an old filesystem), and holds various metadata about the file. Since th= e >> largest inode structure right now is ~160 bytes, the rest of the inode >> contains inline extended attributes. Inodes' data is stored using eithe= r >> data blocks (under ext2/3) or extents (under ext4). >>=20 >> 5) Extents >> Ext4 inodes store data in extents. These let N contiguous logical block= s >> that are represented by N contiguous physical blocks be represented by = a >> single extent structure, which minimizes filesystem metadata bloat and >> speeds up block mapping (particularly due to the fact that high-quality >> ext4 implementations like linux's try /really/ hard to make the file >> contiguous, so it's common to have files with almost 0 fragmentation). >> Inodes that use extents store them in a tree, and the top of the tree >> is stored on i_data. The tree's leaves always start with an >> EXT4_EXTENT_HEADER and contain EXT4_EXTENT_INDEX on eh_depth !=3D 0 and >> EXT4_EXTENT on eh_depth =3D 0; these entries are always sorted by logic= al >> block. >>=20 >> 6) Directories >> Ext4 directories are files that store name -> inode mappings for the >> logical directory; this is where files get their names, which means ext= 4 >> inodes do not themselves have names, since they can be linked (present) >> multiple times with different names. Directories can store entries in t= wo >> different ways: >> 1) Classical linear directories: They store entries as a mostly-linked >> mostly-list of EXT4_DIR_ENTRY. >> 2) Hash tree directories: These are used for larger directories, with >> hundreds of entries, and are designed in a backwards-compatible way. >> These are not yet implemented in the Ext4Dxe driver. >>=20 >> 7) Journal >> Ext3/4 filesystems have a journal to help protect the filesystem agains= t >> system crashes. This is not yet implemented in Ext4Dxe but is described >> in detail in the Linux kernel's documentation. >>=20 >> The EDK2 implementation of ext4 is based only on the public documentati= on >> available at https://www.kernel.org/doc/html/latest/filesystems/ext4/in= dex.html >> and >> the FreeBSD ext2fs driver (available at >> https://github.com/freebsd/freebsd-src/tree/main/sys/fs/ext2fs, >> BSD-2-Clause-FreeBSD licensed). It is licensed as >> SPDX-License-Identifier: BSD-2-Clause-Patent. >>=20 >> After a brief discussion with the community, the proposed package >> location is edk2-platform/Features/Ext4Pkg >> (relevant discussion: https://edk2.groups.io/g/devel/topic/83060185). >>=20 >> I was the main contributor and I would like to maintain the package in >> the future, if possible. >=20 > While I personally don't like it's outside of the EDK II core, I kind of= get it. However I would strongly suggest to choose a more general package = name, like "LinuxFsPkg", or "NixFsPkg", or maybe even just "FileSystemPkg" = (and move FAT over some day?). Imagine someone wants to import BTRFS next y= ear, should it really be "BtrfsPkg"? I understand it follows the "FatPkg" c= onvention, but I feel like people forget FatPkg was special as to its awkwa= rd license before Microsoft allowed a change a few years ago. Maintainers.t= xt already has the concept of different Reviewers per subfolder, maybe it c= ould be extended a little to have a common EDK II contributor to officially= maintain the package, but have you be a Maintainer or something like a Rev= iewer+ to your driver? Or you could maintain the entire package of course. >=20 Marvin, Good point that the FatPkg was more about license boundary than anything e= lse, so I=E2=80=99m not opposed to a more generic package name.=20 >> Current limitations: >> 1) The Ext4Dxe driver is, at the moment, read-only. >> 2) The Ext4Dxe driver at the moment cannot mount older (ext2/3) >> filesystems. Ensuring compatibility with >> those may not be a bad idea. >>=20 >> I intend to test the package using the UEFI SCTs present in edk2-test, >> and implement any other needed unit tests myself using the already >> available unit test framework. I also intend to (privately) fuzz the >> UEFI driver with bad/unusual disk images, to improve the security and >> reliability of the driver. >>=20 >> In the future, ext4 write support should be added so edk2 has a >> fully-featured RW ext4 driver. There could also be a focus on >> supporting the older ext4-like filesystems, as I mentioned in the >> limitations, but that is open for discussion. >=20 > I may be alone, but I strongly object. One of our projects (OpenCore) ha= s a disgusting way of writing files because the FAT32 driver in Aptio IV fi= rmwares may corrupt the filesystem when resizing files. To be honest, it ma= y corrupt with other usages too and we never noticed, because basically we = wrote the code to require the least amount of (complex) FS operations. >=20 > The issue with EDK II is, there is a lot of own code and a lot of users,= but little testing. By that I do not mean that developers do not test thei= r code, but that nobody sits down and performs all sorts of FS manipulation= s in all sorts of orders and closely observes the result for regression-tes= ting. Users will not really test it either, as UEFI to them should just som= ehow boot to Windows. If at least the code was shared with a codebase that = is known-trusted (e.g. the Linux kernel itself), that'd be much easier to t= rust, but realistically this is not going to happen. > My point is, if a company like AMI cannot guarantee writing does not dam= age the FS for a very simple FS, how do you plan to guarantee yours doesn't= for a much more complex FS? I'd rather have only one simple FS type that s= upports writing for most use-cases (e.g. logging). >=20 > At the very least I would beg you to have a PCD to turn write support of= f - if it will be off by default, that'd be great of course. :) > Was there any discussion yet as to why write support is needed in the fi= rst place you could point me to? >=20 I think having a default PCD option of read only is a good idea.=20 EFI on Mac carries HFS+ and APFS EFI file system drivers and both of those= are read only for safety, security, and to avoid the need to validate them= . So I think some products may want to have the option to ship read only ve= rsions of the file system.=20 Seems like having EFI base file system tests would be useful. I=E2=80=99d = imaging with OVMF it would be possible to implement a very robust test infr= astructure. Seems like the hard bits would be generating the test cases and= figuring out how to validate the tests did the correct thing. I=E2=80=99m = guess the OS based file system drivers are robust and try to work around bu= gs gracefully? Maybe there is a way to turn on OS logging, or even run an O= S based fsck on the volume after the tests complete. Regardless this seems = like an interesting project, maybe we can add it to next years GSoC? Thanks, Andrew Fish > Thanks for your work! >=20 > Best regards, > Marvin >=20 >> The driver's handling of unclean unmounting through forced shutdown is = unclear. >> Is there a position in edk2 on how to handle such cases? I don't think >> FAT32 has a "this filesystem is/was dirty" and even though it seems to >> me that stopping a system from booting/opening the partition because >> "we may find some tiny irregularities" is not the best course of >> action, I can't find a clear answer. >>=20 >> The driver also had to add implementations of CRC32C and CRC16, and >> after talking with my mentor we quickly reached the conclusion that >> these may be good candidates for inclusion in MdePkg. We also >> discussed moving the Ucs2 <-> Utf8 conversion library in RedfishPkg >> (BaseUcs2Utf8Lib) into MdePkg as well. Any comments? >>=20 >> Feel free to ask any questions you may find relevant. >>=20 >> Best Regards, >>=20 >> Pedro Falcato >>=20 >>=20 >>=20 >>=20 >=20 >=20 >=20 >=20 --Apple-Mail=_B1BA9CB3-B26B-4BB1-9C2A-69A68797161F Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On Jul 22, 2= 021, at 3:24 AM, Marvin H=C3=A4user <mhaeuser@posteo.de> wrote:

On 22.07.21 01:12, Pedro Falcato wrote:
EXT4 (fourth extended filesystem) is a files= ystem developed for Linux
that has been in wide use (desktops= , servers, smartphones) since 2008.

The Ext4Pk= g implements the Simple File System Protocol for a partition
= that is formatted with the EXT4 file system. This allows UEFI Drivers,
UEFI Applications, UEFI OS Loaders, and the UEFI Shell to access = files
on an EXT4 partition and supports booting a UEFI OS Loa= der from an
EXT4 partition.
This project is one= of the TianoCore Google Summer of Code projects.

Right now, Ext4Pkg only contains a single member, Ext4Dxe, which is = a
UEFI driver that consumes Block I/O, Disk I/O and (optional= ly) Disk
I/O 2 Protocols, and produces the Simple File System= protocol. It
allows mounting ext4 filesystems exclusively.
Brief overhead of EXT4:
Layout of= an EXT2/3/4 filesystem:
(note: this driver has been develope= d using
https://www.kernel.org/doc/html/latest= /filesystems/ext4/index.html as
documentation).

An ext2/3/4 filesystem (here on out referred to as si= mply an ext4 filesystem,
due to the similarities) is composed= of various concepts:

1) Superblock
The superblock is the structure near (1024 bytes offset from the sta= rt)
the start of the partition, and describes the filesystem = in general.
Here, we get to know the size of the filesystem's= blocks, which features
it supports or not, whether it's been= cleanly unmounted, how many blocks
we have, etc.

2) Block groups
EXT4 filesystems are divide= d into block groups, and each block group covers
s_blocks_per= _group(8 * Block Size) blocks. Each block group has an
associ= ated block group descriptor; these are present directly after the
superblock. Each block group descriptor contains the location of the=
inode table, and the inode and block bitmaps (note these bit= maps are only
a block long, which gets us the 8 * Block Size = formula covered previously).

3) Blocks
The ext4 filesystem is divided into blocks, of size s_log_block_size= ^ 1024.
Blocks can be allocated using individual block group= s's bitmaps. Note
that block 0 is invalid and its presence on= extents/block tables means
it's part of a file hole, and tha= t particular location must be read as
a block full of zeros.<= br class=3D"">
4) Inodes
The ext4 filesystem di= vides files/directories into inodes (originally
index nodes).= Each file/socket/symlink/directory/etc (here on out referred
to as a file, since there is no distinction under the ext4 filesystem) is<= br class=3D"">stored as a /nameless/ inode, that is stored in some block gr= oup's inode
table. Each inode has s_inode_size size (or GOOD_= OLD_INODE_SIZE if it's
an old filesystem), and holds various = metadata about the file. Since the
largest inode structure ri= ght now is ~160 bytes, the rest of the inode
contains inline = extended attributes. Inodes' data is stored using either
data= blocks (under ext2/3) or extents (under ext4).

5) Extents
Ext4 inodes store data in extents. These let N c= ontiguous logical blocks
that are represented by N contiguous= physical blocks be represented by a
single extent structure,= which minimizes filesystem metadata bloat and
speeds up bloc= k mapping (particularly due to the fact that high-quality
ext= 4 implementations like linux's try /really/ hard to make the file
contiguous, so it's common to have files with almost 0 fragmentation= ).
Inodes that use extents store them in a tree, and the top = of the tree
is stored on i_data. The tree's leaves always sta= rt with an
EXT4_EXTENT_HEADER and contain EXT4_EXTENT_INDEX o= n eh_depth !=3D 0 and
EXT4_EXTENT on eh_depth =3D 0; these en= tries are always sorted by logical
block.

6) Directories
Ext4 directories are files that stor= e name -> inode mappings for the
logical directory; this i= s where files get their names, which means ext4
inodes do not= themselves have names, since they can be linked (present)
mu= ltiple times with different names. Directories can store entries in two
different ways:
1) Classical linear directories: T= hey store entries as a mostly-linked
mostly-list of EXT4_DIR_= ENTRY.
2) Hash tree directories: These are used for larger di= rectories, with
hundreds of entries, and are designed in a ba= ckwards-compatible way.
These are not yet implemented in the = Ext4Dxe driver.

7) Journal
Ext3/= 4 filesystems have a journal to help protect the filesystem against
system crashes. This is not yet implemented in Ext4Dxe but is descri= bed
in detail in the Linux kernel's documentation.

The EDK2 implementation of ext4 is based only on the = public documentation
available at https://www.= kernel.org/doc/html/latest/filesystems/ext4/index.html
an= d
the FreeBSD ext2fs driver (available at
https://github.com/freebsd/freebsd-src/tree/main/sys/fs/ext2fs,<= br class=3D"">BSD-2-Clause-FreeBSD licensed). It is licensed as
SPDX-License-Identifier: BSD-2-Clause-Patent.

After a brief discussion with the community, the proposed package
location is edk2-platform/Features/Ext4Pkg
(relevant = discussion: https://edk2.groups.io/g/devel/topic/83060185).
I was the main contributor and I would like to maintain the pa= ckage in
the future, if possible.
=
While I personally don't like= it's outside of the EDK II core, I kind of get it. However I would strongl= y suggest to choose a more general package name, like "LinuxFsPkg", or "Nix= FsPkg", or maybe even just "FileSystemPkg" (and move FAT over some day?). I= magine someone wants to import BTRFS next year, should it really be "BtrfsP= kg"? I understand it follows the "FatPkg" convention, but I feel like peopl= e forget FatPkg was special as to its awkward license before Microsoft allo= wed a change a few years ago. Maintainers.txt already has the concept of di= fferent Reviewers per subfolder, maybe it could be extended a little to hav= e a common EDK II contributor to officially maintain the package, but have = you be a Maintainer or something like a Reviewer+ to your driver? Or you co= uld maintain the entire package of course.


Marvin,

Good= point that the FatPkg was more about license boundary than anything else, = so I=E2=80=99m not opposed to a more generic package name. 

Current limitations:
1) The Ext4Dxe driver is, at the= moment, read-only.
2) The Ext4Dxe driver at the moment canno= t mount older (ext2/3)
filesystems. Ensuring compatibility wi= th
those may not be a bad idea.

= I intend to test the package using the UEFI SCTs present in edk2-test,
and implement any other needed unit tests myself using the alread= y
available unit test framework. I also intend to (privately)= fuzz the
UEFI driver with bad/unusual disk images, to improv= e the security and
reliability of the driver.
<= br class=3D"">In the future, ext4 write support should be added so edk2 has= a
fully-featured RW ext4 driver. There could also be a focus= on
supporting the older ext4-like filesystems, as I mentione= d in the
limitations, but that is open for discussion.

I may be= alone, but I strongly object. One of our projects (OpenCore) has a disgust= ing way of writing files because the FAT32 driver in Aptio IV firmwares may= corrupt the filesystem when resizing files. To be honest, it may corrupt w= ith other usages too and we never noticed, because basically we wrote the c= ode to require the least amount of (complex) FS operations.

The issue with EDK II is, there is a lot of own code and a lot of users, = but little testing. By that I do not mean that developers do not test their= code, but that nobody sits down and performs all sorts of FS manipulations= in all sorts of orders and closely observes the result for regression-test= ing. Users will not really test it either, as UEFI to them should just some= how boot to Windows. If at least the code was shared with a codebase that i= s known-trusted (e.g. the Linux kernel itself), that'd be much easier to tr= ust, but realistically this is not going to happen.
My point is, if a company like AMI cannot guar= antee writing does not damage the FS for a very simple FS, how do you plan = to guarantee yours doesn't for a much more complex FS? I'd rather have only= one simple FS type that supports writing for most use-cases (e.g. logging)= .

At the very least I would beg you to have a PCD to turn w= rite support off - if it will be off by default, that'd be great of course.= :)
Was there any discu= ssion yet as to why write support is needed in the first place you could po= int me to?


I thi= nk having a default PCD option of read only is a good idea. 

EFI on Mac carries HFS+ and APFS EFI file system= drivers and both of those are read only for safety, security, and to avoid= the need to validate them. So I think some products may want to have the o= ption to ship read only versions of the file system. 

Seems like having EFI base file system tests would be u= seful. I=E2=80=99d imaging with OVMF it would be possible to implement a ve= ry robust test infrastructure. Seems like the hard bits would be generating= the test cases and figuring out how to validate the tests did the correct = thing. I=E2=80=99m guess the OS based file system drivers are robust and tr= y to work around bugs gracefully? Maybe there is a way to turn on OS loggin= g, or even run an OS based fsck on the volume after the tests complete. Reg= ardless this seems like an interesting project, maybe we can add it to next= years GSoC?

Thanks,

Andrew Fish

Thanks for your work!

Be= st regards,
Marvin

The driver's handling of unclean unmounting thro= ugh forced shutdown is unclear.
Is there a position in edk2 o= n how to handle such cases? I don't think
FAT32 has a "this f= ilesystem is/was dirty" and even though it seems to
me that s= topping a system from booting/opening the partition because
"= we may find some tiny irregularities" is not the best course of
action, I can't find a clear answer.

The dr= iver also had to add implementations of CRC32C and CRC16, and
after talking with my mentor we quickly reached the conclusion that
these may be good candidates for inclusion in MdePkg. We also
discussed moving the Ucs2 <-> Utf8 conversion library in Red= fishPkg
(BaseUcs2Utf8Lib) into MdePkg as well. Any comments?<= br class=3D"">
Feel free to ask any questions you may find re= levant.

Best Regards,

Pedro Falcato





<= br style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 1= 2px; font-style: normal; font-variant-caps: normal; font-weight: normal; le= tter-spacing: normal; text-align: start; text-indent: 0px; text-transform: = none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0p= x; text-decoration: none;" class=3D"">

--Apple-Mail=_B1BA9CB3-B26B-4BB1-9C2A-69A68797161F--